zoukankan      html  css  js  c++  java
  • 使用T4模板创建一个例子

    1、创建项目,添加新项,名称处填写Messages.tt,如下图:

    添加后,Messages.tt文件内容如下:

    1 <#@ template debug="false" hostspecific="false" language="C#" #>
    2 <#@ output extension=".txt" #>

    2、创建一个实体对象MessageEntry,用以传递模版信息,具体代码如下:

     1     public class MessageEntry
     2     {
     3         public string Id { get; private set; }
     4         public string Value { get; private set; }
     5         public string Category { get; private set; }
     6         public MessageEntry(string id, string value, string category)
     7         {
     8             this.Id = id;
     9             this.Value = value;
    10             this.Category = category;
    11         }
    12 
    13         public string Format(params object[] args)
    14         {
    15             return string.Format(this.Value, args);
    16         }
    17     }
    MessageEntry.cs

    3、新建文件Messages.xml,用以配置要生成的信息:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <messages>
    3     <message id="MandatoryField" value="The {0} is mandatory." category="Validation"/>
    4     <message id="GreaterThan" value="The {0} must be greater than {1}." category="Validation"/>
    5     <message id="ReallyDelete" value="Do you really want to delete the {0}." category="Confirmation"/>
    6     <message id="UserInfo" value="Do you really want to delete the {0}." category="UserItemInfo"/>
    7 </messages>
    Messages.xml

    4、修改Messages.tt文件如下:

     1 <#@template debug="false" hostspecific="true" language="C#"#>
     2 <#@assembly name="System.Core.dll"#>
     3 <#@assembly name="System.Xml"#>
     4 <#@import namespace="System"#>
     5 <#@import namespace="System.Xml"#>
     6 <#@import namespace="System.Linq"#>
     7 <#@output extension=".cs" #>
     8 namespace MessageCodeGenrator
     9 {
    10     using System;
    11     public static class Messages
    12     {
    13         <# XmlDocument messageDoc = new XmlDocument();
    14             messageDoc.Load(this.Host.ResolvePath("Messages.xml"));
    15             var messageEntries = messageDoc.GetElementsByTagName("message").Cast<XmlElement>();
    16             var categories = (from element in messageEntries
    17                             select element.Attributes["category"].Value).Distinct();
    18             foreach (var category in categories)
    19             {#>
    20 
    21         public static class <#=  category#>
    22         {
    23             <#
    24             foreach (var element in messageDoc.GetElementsByTagName("message").Cast<XmlElement>().Where(element => element.Attributes["category"].Value == category))
    25             {
    26                 string id = element.Attributes["id"].Value;
    27                 string value = element.Attributes["value"].Value;
    28                 string categotry = element.Attributes["category"].Value;
    29             #>
    30 
    31             public static MessageEntry <#= id #> = new MessageEntry("<#= id #>","<#= value#>","<#= categotry#>");
    32         <#}#>
    33 }
    34     <#}#>
    35 }
    36 }
    Messages.tt

    5、右键点击Messages.tt,选择运行自定义工具,如下:

    6、执行完后,查看Messages.cs文件,可以看到已经生成了所需要的代码:

     1 namespace MessageCodeGenrator
     2 {
     3     using System;
     4     public static class Messages
     5     {
     6         
     7         public static class Validation
     8         {
     9             
    10             public static MessageEntry MandatoryField = new MessageEntry("MandatoryField","The {0} is mandatory.","Validation");
    11         
    12             public static MessageEntry GreaterThan = new MessageEntry("GreaterThan","The {0} must be greater than {1}.","Validation");
    13         }
    14     
    15         public static class Confirmation
    16         {
    17             
    18             public static MessageEntry ReallyDelete = new MessageEntry("ReallyDelete","Do you really want to delete the {0}.","Confirmation");
    19         }
    20     
    21         public static class UserItemInfo
    22         {
    23             
    24             public static MessageEntry UserInfo = new MessageEntry("UserInfo","Do you really want to delete the {0}.","UserItemInfo");
    25         }
    26     }
    27 }
    Messages.cs
  • 相关阅读:
    Python
    python参数传递方式
    python可变类型和不可变类型
    进程、线程和协程的理解
    cookie原理
    http报文格式
    Charles的HTTPS抓包方法及原理分析
    fiddler抓包https请求
    python正则表达式
    java的Junit单元测试
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4794561.html
Copyright © 2011-2022 走看看