我们正在尝试以一种可扩展的方式来实现构建器模式,该方式不依赖于我们的开发人员直接使用通用的With
模式对构建器进行编码(即,每个公共字段在其上都使用WithX(...)
生成器)。
我们已经看到了一种潜在的模式,该模式使用lambda表达式进行更改,将生成器简化为通用的With
函数,然后在调用Build
时将lambda应用于调用。
但是,这种模式的所有实现都期望正在创建的对象应该具有无参数的构造函数和公共设置器。
我们尝试构建的对象既没有公共设置方法,也没有无参数的构造方法。
例如,我们的类如下:
public class Class1
{
public int field { get; }
public Class1(int field)
{
this.field = field;
}
}
我们的建造者通常是:
public class Class1Builder
{
private int _field;
public Class1Builder()
{
this._field = 1;
}
public Class1Builder WithField(int field)
{
_field = field;
return this;
}
public Class1 Build()
{
return new Class1(_field);
}
}
我们想将其With
方法转换为可以使用的方法:
var class1 = new Class1Builder.With(x => x.Field = 3).Build();
有没有办法做这样的事情?