为了创建测试数据,我们使用了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/