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

标签 .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 的错误?

最佳答案

这是一个回归错误。 3.1版本将会修复

关于.net - 对非拦截方法内的属性的调用不会转发到目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787257/

相关文章:

azure - 为什么 WAIISHost 会锁定某些文件

c# - 用于单元测试的 CaSTLe 类代理

c# - 从现有对象创建代理

c# - 比较两个对象时有条件地更改 GetHashCode()

c# - 可用于帮助生成 HTML 的工具/SDK 有哪些?

.net - 在应用程序中构建自动化的想法

caSTLe-windsor - 温莎城堡 : UsingFactoryMethod can't instantiate with a weird error

asp.net - 如何将 CaSTLe Windsor 与 ASP.Net Web 表单一起使用?

.net - 城堡动态代理 : Get unproxied object

.net - 如何编写自己的 .net 混淆器