假设我有一个继承自DynamicObject的类:
public class DynamicBase : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
//Yadda yadda yadda
}
//same for TrySetMember
}
然后我有一个从DynamicBase继承的子类:
public class ChildClass : DynamicBase
{
public void SomeProperty { get; set; }
}
我希望能自动监控子类中"SomeProperty"的getter和setter。目前,由于"SomeProperty"存在于子类中,方法并没有路由到TryGet/SetMember或任何其他DynamicObject的重写方法。
理想情况下,当基类对象被实例化后,我希望出现这种行为:
var someInstance = new ChildClass();
someInstance.SomeProperty = "someValue" //Monitored somehow in DynamicBase
与创建DynamicBase实例并将子类作为类型传递(这是Moq使用DynamicProxy创建拦截器的方式)相反:
var someInstance = new DynamicBase<ChildClass>();
我在想:
- 使用C#是否可能实现这个功能?
- 如果DynamicObject是错误的基类,我应该退而使用IDynamicMetaObjectProvider或其他什么?
- 如果我需要采用DynamicBase的方式来创建一个代理,将ChildClass与我正在寻找的组合行为结合起来,是否可以使用类似DynamicProxy的东西来拦截调用?