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