我们使用 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 之前,我需要能够在运行时向方法添加属性。
如何在运行时向方法添加属性?
最佳答案
您要实现的目标非常复杂,因此我将尝试提供一些帮助您入门的东西。这就是我认为您需要结合起来才能实现的目标:
- 定义一个抽象类
AbstractEventDebugger
,使用方法Search
搜索所有event
成员,并将它们注册到 EventInspector。此外,定义一个方法IdentifyEvent
,让您能够识别调用它的事件(这取决于您 - 将包含哪些参数等)。 - 使用
TypeBuilder
(如here 所述)定义一个继承自您的类的动态类型
。此类将是您的调试器
对象的类。 - 使用
Reflection.Emit.MethodBuilder
(参见 here)将处理程序附加到您的类,这将从父类调用IdentifyEvent
方法,并且, Reflection.Emit
使用CustomAttributeBuilder
类的处理程序的属性(参见 here )。- 创建您的
dynamic
类的实例并将其发送到 EventInspector。 - 启动它
:)
Here是关于如何创建调用某物的方法的示例(实际上它是经典的“Hello world”)。
你需要做很多调整才能把它做好,但你会学到很多关于反射的知识。
祝你好运!
关于c# - 如何在运行时向方法添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268426/