为了创建我们的测试数据,我们使用以下 Builder 模式的变体(简化示例!):
示例类:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
建设者:
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 类的名称和属性),因此简单的基于文本的代码生成或正则表达式魔法在这里并不合适。首选动态解决方案,而不是基于文本的解决方案,并且可以从 Visual Studio 内部快速触发。
我正在寻找为此类场景执行代码生成的最佳方法。反射?密码匠?T4 模板?带有宏的 Resharper Live 模板?
我期待看到一些很棒的答案:)