对非拦截方法内的属性的调用不会转发到目标对象

时间:2012-03-20 13:00:19

标签: .net castle-windsor castle-dynamicproxy

我有一个更改跟踪框架,用于跟踪客户端上对域对象所做的更改。它使用Castle.Windsor作为创建代理对象的工具。在我将Castle更改为版本3.0之后,未拦截的方法内的属性调用不再转发到目标对象。

sequence diagram 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;
  }
}

这现在是预期的行为还是这是Castle 3.0的错误?

1 个答案:

答案 0 :(得分:2)

这是一个回归错误。它将在版本3.1中修复