我有一个更改跟踪框架,用于跟踪对客户端上的域对象所做的更改。它使用 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/