Вызовы свойств внутри не перехваченных методов не перенаправляются целевому объекту. - PullRequest
2 голосов
/ 20 марта 2012

У меня есть структура отслеживания изменений, которая отслеживает изменения, внесенные в объекты домена на клиенте.Он использует Castle.Windsor в качестве инструмента для создания прокси-объектов.После того, как я изменил Castle на версию 3.0, вызовы свойств внутри методов, которые не перехвачены, больше не пересылаются целевому объекту.

диаграмма последовательности http://www.pictureupload.de/originals/pictures/200312135214_ct.png

ChangeTracker - мой собственный класс, которыйобрабатывает отслеживание изменений, внесенных во внутренний объект.

Используется пользовательский ProxyGenerationHook, который корректно работал с Castle 2.5:

private sealed class ProxyGenerationHook : IProxyGenerationHook
{
    public void MethodsInspected()
    { }

    public void NonProxyableMemberNotification(Type type, MemberInfo memberInfo)
    { }

    public bool ShouldInterceptMethod(Type type, MethodInfo methodInfo)
    {
       if (methodInfo == null)
       {
          throw ExceptionBuilder.ArgumentNull("methodInfo");
       }

       string methodName = methodInfo.Name;
       bool result = methodName.StartsWith("set_", StringComparison.OrdinalIgnoreCase) ||
                     methodName.StartsWith("get_", StringComparison.OrdinalIgnoreCase);

       return result;
    }
 }

Используемый класс домена:

public class Person
{
  public virtual int Id { set; get; }
  public virtual string Name { set; get; }

  protected virtual int Age { set; get; }

  public void SetAgeTo(int value)
  {
     Age = value;
  }
}

Это теперь предполагаемое поведение или это ошибка Касла 3.0?

1 Ответ

2 голосов
/ 01 июля 2012

Это ошибка регрессии.Это будет исправлено в версии 3.1

...