Closed jamir-araujo closed 8 years ago
Agora, ao invés de implementar a interface IConvention
, um convenção passara a herdar da classe abstrata Convention
.
Interface IConvention
:
public interface IConvention
{
Func<object, string> CreateKeyExtractor(Type type);
bool FitInConvention(Type type);
}
classe abstrata Convention
:
public abstract class Convention
{
public abstract Func<object, string> CreateKeyExtractor(Type type);
public abstract bool FitInConvention(Type type);
protected Func<object, object> GetPropertyGetter(Type type, string propertyName);
protected bool HasProperty(Type type, string propertyName);
}
Onde uma implementação de convenção customizada ficaria assim:
public class MyConvention : IConvention
{
public Func<object, string> CreateKeyExtractor(Type type)
{
var property = type.GetProperty("Id");
return obj => property.GetValue(obj).ToString();
}
public bool FitInConvention(Type type)
{
return type.GetProperty("Id") != null;
}
}
Agora, fica assim:
public class MyConvention : Convention
{
public override Func<object, string> CreateKeyExtractor(Type type)
{
var getter = GetPropertyGetter(type, "Id");
return obj => getter(obj).ToString();
}
public override bool FitInConvention(Type type)
{
return HasProperty(type, "Id");
}
}
CacheConfiguration
mudou.O método construtor da classe CacheConfiguration
que recebia uma implementação de convenção era assim:
public class CacheConfiguration
{
public CacheConfiguration(ObjectCache objectCache, IConvention convention) { ... }
}
Ficou assim:
public class CacheConfiguration
{
public CacheConfiguration(ObjectCache objectCache, Convention convention) { ... }
}
Uma convenção deve herdar da classe abstrata
Convetion
ao invés de implementar a interfaceIConvetion
como é feito hoje. Dessa formar é possível fornecer métodos mais otimizados que usem a classePropertyAssessorFactory
que cria delegates para um acesso mais rápido que Refleciton pura.