Bra*_*oor 9 reflection resharper code-generation codesmith visual-studio
要创建测试数据,我们使用Builder模式的以下变体(简化示例!):
样本类:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
建设者:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:示例本身的上下文不相关.这里重要的是如何在示例中,像PersonBuilder这样的构建器类可以通过查看实体类(Person)并应用相同的模式来完全生成 - 请参阅下文.
现在假设person类有15个属性而不是2.需要一些猴子来实现构建器类,而理论上,它可以自动从Person类生成.我们可以使用代码生成来快速设置构建器类,并在以后根据需要添加自定义代码.
代码生成过程必须知道上下文(人类的名称和属性),因此简单的基于文本的代码生成或正则表达式魔法在这里感觉不对.一种动态的解决方案,不是基于文本的,可以从视觉工作室内快速触发,是首选.
我正在寻找为这种情况执行代码生成的最佳方法.反射?CodeSmith中?T4模板?Resharper Live模板与宏?
我期待看到一些很棒的答案:)
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |