我正在编写一个小型控制台应用程序,使用 TextTemplatingFilePreprocessor 生成一些脚手架代码。
我有许多使用的.tt文件,它们都使用相同的模型,从中为各个类派生值。在这个MSDN article之后,我为正在创建的类创建了另一个部分类文件,并添加了一个允许我传入模型的构造函数。
因此,对于要生成的名为ServiceEntity
的类,我有一个ServiceEntity.tt
文件和一个名为ServiceEntityCode.cs
的第二个文件,其中包含类似的内容......
partial class ServiceEntity
{
IServiceConfig _config;
public ServiceEntity(IServiceConfig config)
{
_config = config;
}
}
问题是,我必须复制此代码才能为我正在生成的每个类创建一个构造函数。
我更喜欢...... ...
class BaseTemplate
{
IServiceConfig _config;
public BaseTemplate(IServiceConfig config)
{
_config = config;
}
}
partial class ServiceEntity : BaseTemplate
{
public ServiceEntity() : base() {}
}
任何人都可以给我一个指针,指出是否可以实现这样的事情,如果可以的话,我可以在哪里找到详细信息?
=== EDIT === 这是一个示例模板......
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
using System.Runtime.Serialization;
namespace <#= _config.ServiceEntityNamespace #>
{
[DataContract()]
public class <#= _config.ServiceEntityName #>
{
[DataMember()]
public string Description { get; set; }
[DataMember()]
public int Id { get; set; }
[DataMember()]
public string Name { get; set; }
}
}
.tt文件下生成的.cs代码包括这个......
public partial class ServiceEntity : ServiceEntityBase
{
//...
}
但ServiceEntityBase
本身不会继承任何东西。
答案 0 :(得分:1)
这就是你想要的吗?
namespace <#= _config.ServiceEntityNamespace #>
{
[DataContract()]
public class <#= _config.ServiceEntityName #> : BaseTemplate
{
public <#= _config.ServiceEntityName #>() : base() {}
[DataMember()]
public string Description { get; set; }
[DataMember()]
public int Id { get; set; }
[DataMember()]
public string Name { get; set; }
}
}