Одним из решений является переопределение фабрики прокси Castle по умолчанию и расширение массива интерфейсов с IDataErrorInfo. LazyInitializer фактически не реализует этот интерфейс, он только перенаправляет вызовы к нашей собственной прокси-реализации. DataBindingProxyFactory
должен быть зарегистрирован как прокси-фабрика NHibernate.
public class DataBindingProxyFactory : ProxyFactory, IProxyFactoryFactory
{
public IProxyValidator ProxyValidator { get { return new DynProxyTypeValidator(); } }
public IProxyFactory BuildProxyFactory()
{
return new DataBindingProxyFactory();
}
public bool IsInstrumented(Type entityClass)
{
return true;
}
public override INHibernateProxy GetProxy(object id, ISessionImplementor session)
{
try
{
var initializer = new LazyInitializer(EntityName, PersistentClass, id, GetIdentifierMethod,
SetIdentifierMethod, ComponentIdType, session);
var interfaces =
new List<Type>(Interfaces){
typeof (INotifyPropertyChanged),
typeof (IDataErrorInfo)
}.ToArray();
var generatedProxy = IsClassProxy
? DefaultProxyGenerator.CreateClassProxy(PersistentClass, interfaces, initializer)
: DefaultProxyGenerator.CreateInterfaceProxyWithoutTarget(Interfaces[0], interfaces,
initializer);
initializer._constructed = true;
return (INHibernateProxy) generatedProxy;
}
catch (Exception e)
{
log.Error("Creating a proxy instance failed", e);
throw new HibernateException("Creating a proxy instance failed", e);
}
}
}