创建动态实现接口的类

Joh*_*Boy 5 c# interface visual-studio

我正在尝试编写一个代码,该代码允许用户加载程序集(DLL文件),在所述程序集中选择一个接口,然后生成一个继承该接口的类以及所有必需方法的存根。

该类将生成到文件中或活动的VS会话中(该代码旨在在通过自定义模板创建项目的过程中初始化的IWizard内部使用)。

我已经到达了接口的Type对象的地步,但是我很难理解下一部分,我已经考虑过循环运行接口的方法并将其复制到文本文件中,并添加在适当的位置进行存根实现,但是我很确定有某种更好的方法,也许可以通过第三方工具来实现?

任何帮助,将不胜感激,在此先感谢您。

Dav*_*sky 3

如果要在运行时创建新类型,则需要使用 Reflection.Emit。Reflection.Emit 允许您将中间语言直接发送到当前的 AppDomain(或者您愿意的程序集)中。您可能希望使用内存中的类型,因此您可能不想创建实际的程序集。

创建新类型是通过TypeBuilder类完成的。

Codeproject 有一个很好的介绍:http ://www.codeproject.com/KB/dotnet/Creating_Dynamic_Types.aspx

更新:

我注意到目标是将 C# 代码文件添加到现有项目中。您仍然需要反映到程序集中并发出 IL,但随后您必须将 IL“分解”到 C# 中。 Reflector 是排名第一的推荐工具,尽管我不确定它是否可以按照您想要的方式自动化。