gpt4 book ai didi

c# - 如何在运行时向方法添加属性?

转载 作者:可可西里 更新时间:2023-11-01 07:56:38 25 4
gpt4 key购买 nike

我们使用 Microsoft.Practices.CompositeUI.EventBroker 来处理应用程序中的事件订阅和发布。工作方式是向事件添加属性,指定主题名称,如下所示:

[EventPublication("example", PublicationScope.Global)]
public event EventHandler Example;

然后您向处理程序添加另一个具有相同主题名称的属性,如下所示:

[EventSubscription("example", ThreadOption.Publisher)]
public void OnExample(object sender, EventArgs e)
{
...
}

然后将对象传递给 EventInspector,它会匹配所有内容。

我们需要对此进行调试,因此我们正在尝试创建一个订阅所有 事件的调试类。我可以获得所有主题名称的列表......但仅限于运行时。因此,在将调试对象传递给 EventInspector 之前,我需要能够在运行时向方法添加属性。

如何在运行时向方法添加属性?

最佳答案

您要实现的目标非常复杂,因此我将尝试提供一些帮助您入门的东西。这就是我认为您需要结合起来才能实现的目标:

  1. 定义一个抽象类 AbstractEventDebugger,使用方法 Search 搜索所有 event 成员,并将它们注册到 EventInspector。此外,定义一个方法 IdentifyEvent,让您能够识别调用它的事件(这取决于您 - 将包含哪些参数等)。
  2. 使用TypeBuilder(如here 所述)定义一个继承自您的类的动态类型。此类将是您的 调试器 对象的类。
  3. 使用 Reflection.Emit.MethodBuilder(参见 here)将处理程序附加到您的类,这将从父类调用 IdentifyEvent 方法,并且,
  4. Reflection.Emit 使用 CustomAttributeBuilder 类的处理程序的属性(参见 here )。
  5. 创建您的 dynamic 类的实例并将其发送到 EventInspector。
  6. 启动它:)

Here是关于如何创建调用某物的方法的示例(实际上它是经典的“Hello world”)。

你需要做很多调整才能把它做好,但你会学到很多关于反射的知识。

祝你好运!

关于c# - 如何在运行时向方法添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268426/

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