代码之家  ›  专栏  ›  技术社区  ›  mhamrah

处理从DynamicObject继承的子类时监视非动态方法调用

  •  3
  • mhamrah  · 技术社区  · 16 年前

    假设我有一个继承自DynamicObject的类:

    public class DynamicBase : DynamicObject
    {
       public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
          //Yadda yadda yadda
        }
    
        //same for TrySetMember
    }
    

    public class ChildClass : DynamicBase
    {
       public void SomeProperty { get; set; }
    }
    

    我想自动监视子类中“SomeProperty”的getter和setter。当前,由于子对象中存在某些属性,因此方法不会路由到TryGet/SetMember或DynamicObject的任何其他重写。

    var someInstance = new ChildClass();
    someInstance.SomeProperty = "someValue" //Monitored somehow in DynamicBase
    

    与创建DynamicBase实例不同,子实例作为类型传递(这就是Moq使用DynamicProxy创建拦截器的方式):

    var someInstance = new DynamicBase<ChildClass>();
    

    1. 如果DynamicObject是错误的基类,我应该选择idynamicmetobjectprovider还是其他什么?
    2. 如果我需要走DynamicBase的路线,用我正在寻找的组合行为围绕ChildClass创建一个代理,使用DynamicProxy之类的东西拦截调用?
    1 回复  |  直到 14 年前
        1
  •  1
  •   Rex M    14 年前

    这是不可能的 dynamic IDynamicMetaObjectProvider 不能