Мне нужно использовать VirtualMethodInterceptor. Я обнаружил, что проверка NotifyPropertyChangedBehavior.Invoke для добавления или удаления PropertyChanged никогда не выполнялась. Я изменил, чтобы проверить соответствие имени метода и все работает.
Оригинальный NotifyPropertyChangedBehavior взят из документации Unity по msdn. Мне интересно, может кто-нибудь сказать мне, почему оригинальный код не работает.
Определение класса
public class NotifyPropertyChangeClass
: INotifyPropertyChanged
{
public virtual int SomeInt { get; set; }
public virtual event PropertyChangedEventHandler PropertyChanged;
}
Настройка IUnityContainer
container.AddNewExtension<Interception>();
container.RegisterType<NotifyPropertyChangeClass>(
new Interceptor<VirtualMethodInterceptor>(),
new InterceptionBehavior(new NotifyPropertyChangedBehavior()));
NotifyPropertyChangedBehavior модификация ( оригинал )
public class NotifyPropertyChangedBehavior : IInterceptionBehavior
{
...
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
if (input.MethodBase.Name.Equals(addEventMethodInfo.Name))//(input.MethodBase == addEventMethodInfo)
{
return AddEventSubscription(input, getNext);
}
if (input.MethodBase.Name.Equals(removeEventMethodInfo.Name))//(input.MethodBase == removeEventMethodInfo)
{
return RemoveEventSubscription(input, getNext);
}
if (IsPropertySetter(input))
{
return InterceptPropertySet(input, getNext);
}
return getNext()(input, getNext);
}
...
}