0

我想知道如果任何人有任何T4基於模板的方法攔截系統,誰知道呢?T4模板攔截

我們開始寫的移動應用程序(目前爲MonoTouch的IOS)。我們擁有非常好的DI/IoC核心功能,我希望在新平臺的開發中充分利用這一點。由於不支持運行時代碼生成Reflection.Emit,因此我希望使用T4模板來實現動態攔截功能(+ TinyIoC作爲解決方案的容器)。我們目前正在使用Castle Windsor(並打算繼續爲我們的SL和完整的.NET開發這樣做),但所有Windsor的特定關係都是完全封裝的,所以給定一個合適的T4解決方案,它不應該是很難實現一個使用基於T4的實現而不是Windsor的適配器。

回答

1

如果我理解正確的話,你想用T4在飛行中(在運行時)生成代碼。我不知道有這樣的系統,但我認爲寫這樣的東西不是很困難。

你需要做的是指導C#(或任何其他.NET編譯器)來編譯一些代碼和生成的程序集。完成後,您需要將此程序集加載到您的AppDomain中。之後,您可以使用該動態加載的程序集中的類型。

T4模板引擎是(如果我沒有弄錯)Visual Studio的一部分,所以最難的部分是指示模板引擎生成代碼,可能沒有你的應用程序需要依賴Visual Studio或甚至開始它(這將是可怕的)。

如果您不需要T4的全部功能(這是可能的),你也可以吐出一些.NET代碼自己,安全到一個文件,並指示C#編譯器生成的程序集爲您服務。

祝你好運。

+0

其實,有一個使用它的飛行在運行時Mono項目:)......但實際上並不是我想要在這裏做。即使我可以在運行時做到這一點,但這並不好,因爲平臺(MonoTouch/iOS)不會讓我在運行時進行編譯(無動態代碼發射)。我試圖在構建時自動生成和編譯來自T4模板的代碼,以便產生與運行時生成的類相同的效果。我喜歡你的最後一個想法......也許有一個控制檯應用程序,它可以遍歷編譯好的程序集,並使用CSharpCodeProvider將代理類吐出到一個被編譯的文件中。 – Jeff 2010-12-22 20:35:03