我是否可以使用T4模板生成的类从同一个类继承

时间:2013-12-22 10:40:54

标签: t4

我正在编写一个小型控制台应用程序,使用 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本身不会继承任何东西。

1 个答案:

答案 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; }
    }
}