在visual studio的当前项目中,我将有一个看起来像这样的类
public class DbContextBuilderFactory
{
public List<String> Test { get { return new List<string>{ "adsa", "adas"};} }
}
然后,我可以从t4模板文件加载程序集并找到该类并迭代Test属性并根据列表生成带有类机智属性的.cs文件吗?
预期产出。
public class OutPutClass
{
public int adsa{get;set;}
public int adas{get;set;}
}
答案 0 :(得分:0)
我有一个TemplateManager.tt文件,其中包含一些可重用的逻辑。此tt文件的内部几乎与任何.cs文件相同:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Namespace.With.DbContextBuilderFactory" #>
<#+
// Keep code you want to reuse in a separate tt file
public class TemplateManager
{
// properties
// parse DbContextBuilderFactory
public static IEnumerable<string> ParseDbContextBuilderFactory()
{
DbContextBuilderFactory dbf= new DbContextBuilderFactory();
return dbf.Tests;
}
}
然后在主t4模板中
<#@ template language="C#" debug="true" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude.tt"#>
<#@ include file="TemplateManager.tt"#>
<#@import namespace="System.Data.Entity.Design.PluralizationServices" #>
<#
// preamble
List<Values> values = TemplateManager.ParseDbContextBuilderFactory();
WriteOutput(code, values, namespaceName);
FileManager.Process(); // or something
#>
<#+
//_=_
public void WriteOutput(CodeGenerationTools code, List<string> values, string namespaceName)
{
PopIndent();
#>
namespace <#=code.Escape(namespaceName)#>
{
public class OutPutClass
{
<#+
foreach (var value in values)
{
#>
public int <#=code.Escape(value)#> {get; set; }
<#
} // foreach
#>
}
}
<#
} // WriteOutput
#>