Visual Studio项模板能否获取项目类及其属性自动生成映射?
问题
我正在给团队做可复用的项目模板,现在有个简单的“simple mapper”模板和配套向导,还打算扩展更多模板。模板代码如下:
namespace $rootnamespace$; public class $safeitemname$ { public $mapto$ Map($mapfrom$ entity) { return new $mapto$() { Id = entity.Id, Name = entity.Name }; } public $mapfrom$ MapToDb($mapto$ item) { return new $mapfrom$() { Id = item.Id, Name = item.Name }; } }
这里的$mapto$是用户输入替换的参数。我想确认:基础项模板能不能遍历当前解决方案,拿到像$mapto$这类引用类的属性,自动生成默认的映射代码?我已经知道T4模板可以做到,但就想搞清楚基础项模板本身支不支持这个功能。
回答
基础项模板(也就是Visual Studio里的Item Templates)本身没这个能力,它本质就是静态模板替换预定义参数,比如$rootnamespace$、$safeitemname$这些,没有内置的代码分析或反射功能来遍历解决方案里的类并获取属性。
如果要实现自动读取类属性生成映射的效果,有两种可行方向:
- 扩展模板的自定义向导:用Visual Studio SDK编写自定义向导(实现
IWizard接口),在向导运行时通过EnvDTE API遍历解决方案内的项目和类,反射获取目标类的属性列表,再将这些信息传递给模板完成动态替换。 - 优先考虑T4模板:如果不想折腾SDK开发,T4模板其实更适配这种场景——它能直接通过Visual Studio的CodeModel访问解决方案中的类信息,动态生成映射代码,实现起来更轻量直接。
内容的提问来源于stack exchange,提问作者G Rushton
相关产品推荐
相关产品推荐

