gpt4 book ai didi

.net - 注入(inject)/处理属性 getter / setter ?

转载 作者:行者123 更新时间:2023-12-04 06:09:21 24 4
gpt4 key购买 nike

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

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

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

所以我想知道我想要实现的目标是否可以通过.NET 反射或其他一些机制实现,还有是否可以检测属性 setter / getter 是否已在代码中定义?

谢谢,
亚历克斯。

最佳答案

您可以使用 Type.GetProperties 获取有关类型属性的信息。方法。您将收到 PropertyInfo 的集合目的。那些对象有CanReadCanWrite属性表示属性是否可读/可写。

要覆盖此行为,您必须:

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

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

    关于.net - 注入(inject)/处理属性 getter / setter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948534/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com