2013-12-22 40 views
0

我正在编写一个小的控制台应用程序来使用TextTemplatingFilePreprocessor生成一些脚手架代码。我可以得到使用T4模板生成的类继承相同的类

我有一些使用的.tt文件,它们都使用相同的模型,从中导出各个类的值。沿着这个MSDN article,我为所创建的类创建了另一个部分类文件,并添加了一个允许我传入模型的构造函数。

所以,要生成一个类中调用ServiceEntity,我有一个ServiceEntity.tt文件,并呼吁像ServiceEntityCode.cs其中包含这样的第2个文件...

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() {} 
} 

谁能给我一个指针,这样的事情是否就可以实现,如果可以,在那里可以找到详细信息怎么样?

===编辑=== 下面是一个示例模板...

<#@ 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

我假设您尝试生成构造函数并在生成的代码中继承基类。为什么没有工作?你能否发布生成代码的tt文件或者说明问题的东西?现在我并不确切地看到你在努力。 – FuleSnabel

+0

生成的代码不会从任何东西继承(这是我的第一个想法) –

+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; } 
    } 
} 
+0

我是一个ar5e!谢谢@ shamp00 –

+0

这似乎是明显的解决方案。请注意,如果您想将代码添加到生成的构造函数,可以使用部分方法。 – FuleSnabel