注入/处理属性getter /setter



我写了一个抽象类,我用它来自动化很多INotifyPropertyChanged和IDataErrorInfo的东西。然而,这需要我指定一个自定义的getter/setter,为每个属性调用一个自定义的方法。

为了避免额外的输入,我一直在尝试找到一种方法来覆盖/处理对象中的属性getter/setter,并调用自定义方法而不是生成的getter/setter。

我尝试从DynamicObject继承并重写TryGetMember和TrySetMember,但是这些方法似乎只有在对象声明为动态时才有效。

所以我想知道如果我想要实现的是可能通过。net反射或其他机制,也有无论如何检测属性setter/getter是否已在代码中定义?

谢谢,亚历克斯。

您可以使用type获取有关类型属性的信息。getproperty方法。您将收到PropertyInfo对象的集合。这些对象具有CanReadCanWrite属性,它们表示属性是否可读/可写。

要覆盖此行为,您必须:

    创建动态代理生成器
  1. 动态代理应该以get_PropA和set_PropA的形式拦截对方法的调用,它们是有效的getter和setter,您可以在其中添加额外的逻辑
  2. 不要在代码中使用构造函数来创建这些对象,而是使用代理生成器创建对象,然后将其包装在代理中。
  3. 当然,你的类不能被密封,属性必须是虚拟的,以便创建代理

对于免费解决方案,您最好使用Castle DynamicProxy。如果你准备花一些钱,看看PostSharp,它已经实现了许多类似性质的东西。像INotifyProperty改变,撤销/重做等。您还可以查看任何支持方面编织的AOP框架,但是对于您描述的情况,我将选择DynamicProxy。

最新更新