一直想写一个Code生成系列,但写到CodeSimth,发觉在TerryLee 和努力学习的小熊 两位大牛的博客里讲很详尽,所以就像写些示例方面的,但是苦于没有想到写些什么。最近Artech写了两篇从数据到代码——通过代码生成机制实现强类型编程--上篇和下篇,大牛写得是CodeDom的,今天我就想借借大牛的示例写个CodeSimth版的,希望Artech不要怪我,呵呵。我的Code生成技术已经写了CodeDom的见CodeDom系列目录,欢迎各位园友指教。
好直接到主题。首先是数据实体MessageEntry(我到老A的基础上添加了description属性作为代码字段描述):
代码
在我的机子上的COdeSimth是2..0版本的所以不能使用Linq命名空间,我又想利用这个空间,比较快捷,所以我就在先3.0转化为
Dictionary<string, List<MessageEntry>>实体再传入模板:
Code:
代码
这下几可开始写模板了,见下Code:
代码
很简单,就不说了,如果有问题请留言,其中命名空间完全可以以属性方式传入。
XMl实体用的是老A的:
代码
1 <?xml version="1.0" encoding="utf-8" ?>
2 <messages>
3 <message id="MandatoryField" value="The {0} is mandatory." category="Validation" description="description" />
4 <message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation" description="description" />
5 <message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation" description="description" />
6 </messages>
7
8
2 <messages>
3 <message id="MandatoryField" value="The {0} is mandatory." category="Validation" description="description" />
4 <message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation" description="description" />
5 <message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation" description="description" />
6 </messages>
7
8
我想脱离CodeSimth工具,所以在建立了一个控制台程序,引用CodeSmith.Engine.dll程序集。
Code:
代码
生成后的代码:
代码
ok,全部完成。同时你也可以完全集成与VS中利用VSX Vs扩展,可以参考明年我18 的VSX系列
本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2010/09/25/CodeSimthNamedCMessage.html,如需转载请自行联系原作者