如何在运行时给方法添加属性?我们使用Microsoft.Practices.CompositeUI.EventBroker来处理我们应用程序中的事件订阅和发布。有效的是向事件添加属性,指定主题名称,如下所示:[EventPublication("example",PublicationScope.Global)]publiceventEventHandlerExample;然后使用相同的主题名称为处理程序添加另一个属性,如下所示:[EventSubscription("example",ThreadOption.Publisher)]publicvoidOnExample(objectsender,EventArgse){...}EventInspector,它匹配所有内容。我们需要对此进行调试,因此我们尝试创建一个订阅所有事件的调试类。我可以获得所有主题名称的列表......但仅限于运行时。因此,在将调试对象传递给EventInspector之前,我需要能够在运行时向方法添加属性。如何在运行时为方法添加属性?您要实现的目标非常复杂,因此我将尝试提供一些帮助您入门的东西。这就是我认为你需要结合起来实现的:定义一个抽象类AbstractEventDebugger和一个搜索所有事件成员的方法Search,并将它们注册到EventInspector。此外,定义一个方法IdentifyEvent,它允许您识别调用它的事件(这取决于您-使用什么参数等)。使用类的TypeBuilder的继承来定义动态类型(如此处所述)。此类将是调试器对象的类。使用Reflection.Emit.MethodBuilder(请参阅此处)将Handler附加到您的类,这将从父类和Reflection.Emit调用IdentifyEvent方法。使用CustomAttributeBuilder类的处理程序的CustomAttributeBuilder属性(参见此处)。创建动态类的实例并将其发送到EventInspector。点亮它:)下面是一个如何创建调用某物的方法的示例(实际上它是经典的“Helloworld”)。你需要做很多调整才能做好,但你会学到很多关于反思的知识。祝你好运!属性是一个编译时特性(除非你正在处理ComponentModel-但我怀疑它正在使用反射)。因此,您不能在运行时添加属性。这与“HowdoIaddextramethodstoatypeatruntime?”类似。在常规C#/.NET(DLR之前)中,您不能。您需要深入研究DynamicMethod的世界。但是,当您需要了解MSIL时,我真的建议您仔细考虑您的体系结构。EventInspector使用EventTopics(存储在WorkItems中)来完成所有繁重的工作。每个EventTopic对象都可以访问一个名为Microsoft.Practices.CompositeUI.EventBroker.EventTopic的TraceSource,您可以像这样在app.config文件中启用它:这应该路由很多有用的消息以在VisualStudio窗口中进行调试。如果你想超越VS调试窗口,你有很多选择。我建议查看以下文章:使用TraceSource的代码检测我的PersoanlVadeMecum结束了C#学习教程:如何在运行时向方法添加属性?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
