当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在运行时向方法添加属性?》经验,为你挑选了1个好方法。

我们使用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> Bogdan Maxim..:

你想要实现的是非常复杂的,所以我会尝试提供一些东西,只是为了让你开始.这是我认为你需要结合才能实现的目标:

    AbstractEventDebugger使用Search搜索所有event成员的方法定义抽象类,并使用EventInspector注册它们.另外,定义一个方法IdentifyEvent,允许您识别调用它的事件(这取决于您 - 具有哪些参数等).

    定义dynamic type使用TypeBuilder(如描述在这里),从你的类继承.这个类将是你的debugger对象的类.

    使用Reflection.Emit.MethodBuilder(参见此处)将处理程序附加到您的类,它将IdentifyEvent从父类调用该方法,并且

    Reflection.Emit使用CustomAttributeBuilder类处理程序的属性(参见此处).

    创建dynamic类的实例并将其发送到EventInspector.

    燃烧起来;动起来 :)

下面是一个关于如何创建调用某个东西的方法的示例(实际上它是经典的"Hello world").

你需要做很多调整才能很好地完成它,但你会学到很多关于反思的知识.

祝好运!

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有