2

在我看来,这听起来是一个绝妙的主意。使用 EnvDTE 也可以做到这一点,那么为什么没有更多可用的示例呢?

也许我错过了这样做的缺点......?

任何指向良好 T4 和 EnvDTE 资源的指针都会很棒。:)

4

2 回答 2

3

你可能看不到它,因为它实际上很难很好地实现。一段时间以来,我一直在使用 T4 从 WCF DTO 生成模型类,以便在 WinForms MVP 变体中使用,并且需要相当长的时间才能使其正常工作。

使用类作为模板的“数据”源本身就非常困难。您需要选择使用反射(或类似的 API)来读取编译后的 IL 或 CodeDom 来读取源代码。如果您选择使用已编译的程序集,您将需要解决文件锁定和加载引用程序集等问题。如果您选择使用源代码,则需要处理潜在的不可编译代码。

一旦你做出决定,复制属性将是你需要做的最简单的事情。您还需要决定源类上的哪些接口和属性(如果有)应该重新实现/复制到生成的类。根据你如何实现验证之类的事情,这可能会引发各种小而挑剔的问题。关于如何处理继承层次结构和对其他模型类的引用,还有很多有趣的决定要做。

以上所有内容都是可以解决的,但是一刀切的方法很难实现。回到你问题的“示例”部分,还有一个潜在的问题是做这么多工作却没有得到报酬。我很想能够分享我为模型生成创建的 T4,但它属于我的雇主,我有更好的业余时间来做,而不是重新实现在网络上发布的方法......

于 2010-11-03T13:44:07.867 回答
0

使用类作为模板的“数据”源非常困难

这是错误的。看asp mvc 3 脚手架。 http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

于 2013-03-01T03:36:40.373 回答