我有一个更改跟踪框架,用于跟踪客户端上对域对象所做的更改。它使用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的错误?
答案 0 :(得分:2)
这是一个回归错误。它将在版本3.1中修复