2010-08-23 64 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