T4代码生成脚本从添加注释,添加命名空间开始(一款强大的代码生成工具从看懂脚本,到随心所欲的玩弄代码,本文只是T4的冰山一角,博主将不断深入探索并完善该文章)
- 精通T4脚本要从读懂脚本的关键代码片段开始
1.1. 给类添加注释-->看懂类对应的代码:<#=codeStringGenerator.EntityClassOpening(entity)#>
替换前
WriteHeader(codeStringGenerator, fileManager);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<#=codeStringGenerator.EntityClassOpening(entity)#>
替换后
WriteHeader(codeStringGenerator, fileManager);
string summary=string.Empty;
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
summary=entity.Documentation.Summary;
else
summary=entity.Name;
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
/// <summary>
/// <#=summary#>
/// </summary>
<#=codeStringGenerator.EntityClassOpening(entity)#>
1.2. 给命名空间添加注释-->看懂引用的命名空间对应的代码:<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
该方法实现与于odeStringGenerator类下边。代码如下:
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}"+"{3}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
includeCollections ? (Environment.NewLine + "using System.Data;") : "",
inHeader ? "" : Environment.NewLine)
: "";
}
1.3. 给属性添加注释-->看懂属性的代码对应的代码:<#=codeStringGenerator.Property(edmProperty)#>
替换前:
foreach (var edmProperty in simpleProperties)
{
#>
<#=codeStringGenerator.Property(edmProperty)#>
替换后:
foreach (var edmProperty in simpleProperties)
{
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
{
summary=edmProperty.Documentation.Summary;
}
else
{
summary="";
}
#>
/// <summary>
/// <#=summary#>
/// </summary>
<#=codeStringGenerator.Property(edmProperty)#>
1.4. 看懂命名空间namespace对应的代码:namespace <#=code.EscapeNamespace(codeNamespace)#>
最新文章
- mysql 7下载安装及问题解决
- 异常处理和JDBC
- BZOJ 1096 【ZJOI2007】 仓库建设
- GridView中超链接设置
- Python 字符串方法详解
- 使用NHibernate(10) -- 补充(inverse &;&; cascade)
- 《Java程序设计》实验四 实验报告
- R语言学习网站
- 【LeetCode练习题】Copy List with Random Pointer
- tomcat设置IP地址或者域名访问
- MySQL批量导出以某数字或字母开头的表
- ubuntu下使用nginx搭建流媒体服务器,实现视频点播
- ubuntu17.10 python3.6 install plugins for AI
- Shell脚本中的break continue exit return
- MySQL分组查询,前3条数据
- js没有函数重载
- JNI编程实现(Linux)
- Spring 属性注入(二)BeanWrapper 结构
- Alpha冲刺报告(4/12)(麻瓜制造者)
- OS X 10.11:如何完全停用Time Machine。
热门文章
- PA教材提纲 TAW10-1
- Windows Server 2012配置iis遇到的问题
- java 环境的安装、设置免密登陆、进行hadoop安装、关闭防火墙
- jQuery登录界面的文本框焦点代码
- JAVA for(i = 0; i<;a.length; i++) 解析
- 多系统引导 Grub
- PTA3
- mysql 中文支持
- 【scrapy】笔记一:安装,以及遇到的坑
- ImportError: dynamic module does not define module export function (PyInit__sqlite3)