从数据到代码基于t4的代码生成方式_第1页
从数据到代码基于t4的代码生成方式_第2页
从数据到代码基于t4的代码生成方式_第3页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、保证质量的目的。这里有T4相关的资料文中的例子可以从这里 一、 XML保证质量的目的。这里有T4相关的资料文中的例子可以从这里 一、 XML文件到C#代再次重申一下 需要通过“代码生成”需要达到的目的。无论对于怎么样的应用, 都需要 一系列的消息。消息的类型很多,比如验证消息、确认消息、日志消息等。 一般会将消息 在一个文件或者数据库中进行 供一些APIAPI一般都是基于消息的ID来获取的,换句话说,消息获取的方式是以一种“弱类型”的编程方式实现的。如果 能够根据消息 的内容动态地生成相应的C#或者VB.NET代码,那么 就能够以一种强类型的方式来获取相应的消息项了。定义了如下一个Messag

2、eEntry类型来表示一个消息条目。为了简单,尽量简化M essageEntry的定义,仅仅保留三个属性Id、Value和Category。Category表示该消息条目所属的类型,你可以根据具体的需要对其分类(比如根据模块名称或者Severity 等)。Value 是一个消息真实的1:publicclassMessageEntry 2: publicstringIdget;privateset;public string Value get; privateset; publicstringCategoryget;privateset; publicMessageEntry(stringid

3、,stringvalue,stringcategory) =category; publicstringFormat(paramsobjectargs) return string.Format(this.Value, 最常用的代码生成当时不是CodeDOM,而是T4,这是一个 17:现所有的消息定义在如下一个XML文件中,XML元素代码一个具体的 1:?xml2:=1.017:现所有的消息定义在如下一个XML文件中,XML元素代码一个具体的 1:?xml2:=1.0 encoding=utf-8 message id=MandatoryField value=The 0 is mandato

4、ry. message nvalue=The0mustben1. messageid=ReallyDeletevalue=Doyoureallywantt 6:etethe0. 在上面的XML中,定义了两个类别(Validation和Confirmation)的三条MessageEntry需通的代码生成工具生成一个包含如下C#代码的CS文件1: public sicclassMessages 2: public icclasspublic icMessageEntry MandatoryField = new d, The 0 is mandatory.,public ic MessageEn

5、try n=newn,he0mustben1.,public icclasspublic ic MessageEntry ReallyDelete = new etethe0.,Doyoureallywant12: o World讲二、之前一直在讲T4,可能还有人不知道T4到底代表什么。T4是对“Text Template n Toolkit”(4个T)的简称。T4直接包含在VS2008和VS2010中,是一个基于文本文件转换的工包。T4 包。T4 的C#或者T-SQL代码等)定义相应的模板。T4模板作用就相当于进行XML 转化过程中使用的XSLT 编写的ASP.NET页面很相似:HTML是静

6、态的,以C#或者VB.NET代码便写的动态执行的代码通过应需要通过代码生成的方式生成如下一段简单的C#代码1:using3: namespace4:14:classsic voidMain(string o,0,o,0,o,0,现直接通过VS来创建一个T4模板来生期望的C#代码。右击项目文件,选择 1: 2: 3: # import namespace=System 4:#outputexten 5: using System;=.cs 7: namespace8:classsic void Main(stringsic void Main(stringo,public string retu

7、rnnew的三、T4 假ve Block)、文本块(Text Block)、代码语句块ement Block)、表达式块ock)和类特性块(Class Feature Block)1、指令块(Directive 和ASP.NET页面的指令一样,它们出现在文件头,通过表示。其中#template的,用于导入命名空间的等等2、文本块(Text 文本块就是直接原样输出的静态文本,不需要添加任何的 。在上面的模板文件中,处理定义在#、文本块就是直接原样输出的静态文本,不需要添加任何的 。在上面的模板文件中,处理定义在#、和中的文本都属于文本块。比如在指令块结束到第一个“#” 之间的内1:using3:

8、 namespace4:classicvoidMain(stringargs) ement 代码语句块通过的形式表示,中间是一段通过相应编程语言编写的程序调用, 可以通过代码语句快控制文本转化的流程。在上面的代码中, 通过代码语句块实现对一个数组进行遍历,输出重复的Console.Wri ine(“ o, 0”, “ ”)语句。1:2: foreach(var3: 4:o,6:7:8:比如在上面的foreach循环中每次迭代输出的人名就是通过表达式块的形式定义(#=5、类特性块(Class Feature 就是将它们定义在类特性块中。类特性块的表现形式为,对o d模板,得到人名列表的 1:pu

9、blic string Initializereturnnew6: 四、通过 T4 模板实现从“数据到代码”6: 四、通过 T4 模板实现从“数据到代码” 现1: 2: 3: 4:5: # import namespace=System.Xml 6: # import namespace=System.Linq 7:#output=.cs 9: namespace10:publicicclassmessageDoc=new var messageEntries =23:varcategories =(from foreach (var categoryin sicclass#= foreach

10、(var ast().Where(element = tributescategory.Value = string id stringvaluestring =32:publicicMessageEntry=newMessageEntry(,32:publicicMessageEntry=newMessageEntry(,#= #= 37:# # 义类型为MessageEntry的是:整个代码生成的输入,即XML文件Messages.xml和模板文件位于需要通过Host属性的ResolvePath方法文件的物理路径。对h方法的调用,需要模板指令中的hostspecific设置为true1: # template

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论