创建一个动态实现接口的类

时间:2010-08-23 14:11:32

标签: c# visual-studio interface

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

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

我得到了接口的Type对象,但是我很难想到下一部分,我已经考虑在循环中运行接口的方法并将它们复制到文本文件中,在适当的地方添加存根实现,但我很确定有一些更好的方法,可能通过第三方工具?

任何帮助将不胜感激, 提前谢谢。

1 个答案:

答案 0 :(得分:4)

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

使用TypeBuilder类创建新类型。

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

更新:

我注意到,目标是将C#代码文件添加到现有项目中。你仍然需要反射到程序集中并发出IL,但是你必须将IL“分解”为C#。 Reflector is the #1 recommended tool for this,虽然我不确定它是否可以按照您想要的方式实现自动化。