У меня есть набор сущностей, которые реализуют интерфейс:
public interface ILocalised
{
Culture Culture { get; }
}
По многим сложным причинам мне нужно отфильтровать сущности, которые не имеют правильной культуры после их возвращения из БД (т.е.Я не могу использовать фильтр).Моей непосредственной мыслью было создание перехватчика, который бы фильтровал любые объекты, которые не имели правильной культуры, например,
public class LocalisationInterceptor : EmptyInterceptor
{
public override object Instantiate(string clazz, NHibernate.EntityMode entityMode, object id)
{
var entity = base.Instantiate(clazz, entityMode, id); //Returns null already
if ((entity is ILocalised) && false == IsValidCulture((ILocalised)entity))
{
return null;
}
return base.Instantiate(clazz, entityMode, id);
}
public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
if((entity is ILocalised) && false == IsValidCulture((ILocalised)entity))
{
entity = null;
return false;
}
return base.OnLoad(entity, id, state, propertyNames, types);
}
private bool IsValidCulture(ILocalised localisedEntity)
{
return localisedEntity.Culture == Culture.En;
}
}
Однако до сих пор, какой бы метод я ни пытался переопределить, он всегда будет возвращать объект.
Есть ли у кого-нибудь идеи, как предотвратить загрузку определенных объектов в перехватчик или какие-либо другие решения?