2010-08-23 70 views
4

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

该类将生成一个文件或生成一个活动的VS会话(该代码旨在通过自定义模板在创建项目期间初始化的IWizard中使用)。我得到了接口的Type对象,但我很难弄清下一个部分,我已经考虑在循环中跨接口的方法运行并将它们复制到文本中文件,在适当的地方添加存根实现,但我很确定有一些更好的方法,可能通过第三方工具?

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

+3

VS已经做了几乎所有的这些。输入'class Foo:IFoo'。将光标放在“IFoo”上并按下“Ctrl”+“。”。 VS会生成代码。 – 2010-08-23 14:17:21

+0

@CraigStuntz VS自动生成很不错,但如果可以告诉它生成将调用转发给某个其他对象的存根,会更好。 – 2017-11-13 22:57:18

回答

3

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

使用TypeBuilder类创建新类型。

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

UPDATE:

。已经引起了我的注意,我们的目标是到C#代码文件添加到现有的项目。你仍然需要反映到程序集中并发出IL,但是你必须将IL“解散”成C#。 Reflector is the #1 recommended tool for this,虽然我不确定它可以按照您想要的方式自动执行。

+1

问题是关于生成类的源代码。至少我是这样读的。 – Constantin 2010-08-23 14:35:11