visual-studio - 如何基于另一个类生成代码?

标签 visual-studio reflection code-generation resharper codesmith

为了创建测试数据,我们使用了Builder模式的以下变体(简化示例!):

范例类别:

public class Person
{
   public string Name { get; set; }
   public string Country { get; set; }
}

builder :
public class PersonBuilder
{
    private string name;
    private string country;

    public PersonBuilder()
    {
        SetDefaultValues();
    }

    private void SetDefaultValues()
    {
        name = "TODO";
        country = "TODO";
    }

    public Person Build()
    {
        return new Person
                   {
                       Name = name,
                       Country = country
                   };
    }

    public PersonBuilder WithName(string  name)
    {
        this.name = name;            
        return this;
    }

    public PersonBuilder WithCountry(string country)
    {
        this.country = country;
        return this;
    }
}

注意:示例本身的上下文不相关。这里重要的是在示例中,如何通过查看实体类(Person)并应用相同的模式来完全生成诸如PersonBuilder之类的构建器类-参见下文。

现在,假设person类具有15个属性,而不是2个。要实现builder类,需要花些功夫,而从理论上讲,它可以从Person类自动生成。我们可以使用代码生成来快速设置构建器类,并在以后根据需要添加自定义代码。

代码生成过程必须要了解上下文(person类的名称和属性),因此简单的基于文本的代码生成或regex魔术在这里感觉不到。首选动态的解决方案,而不是基于文本的解决方案,并且可以从Visual Studio内部快速触发。

我正在寻找针对这种情况执行代码生成的最佳方法。
反射? Codesmith? T4模板?使用宏重新共享Live模板吗?

我期待看到一些很好的答案:)

最佳答案

T4解决方案是Visual Studio很好的集成选项。您可以在T4模板中使用反射来实际生成代码。

关于visual-studio - 如何基于另一个类生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392552/

相关文章:

code-generation - 如何自动化 Lightswitch 进行元编程

ruby - 如何在没有 Web 服务器的情况下从命令行执行 ruby​​ 模板文件 (ERB)?

c - xcode和vs不同的IDE有问题

java - 从字符串加载类

visual-studio - DocFX 为不同文件夹中的项目生成文档

vb.net - 查找给定对象的所有监听器

C# 可移植类库和具有嵌套属性的反射

c# - 从动态创建的类中调用构造函数和方法

asp.net - 成功插入数据后如何清除单选按钮列表?

visual-studio - 不使用模拟器安装 Azure SDK