我正在使用Fluent Builder和回调来动态配置上下文。
当前,我有一个PlaneContext
类,其中包含一个passengers
列表,我想使用方法AddPassenger
来填充该列表,例如:
var builder = new PlaneBuilder<PlaneContext>();
builder.AddPlane(plane => plane.Name = "Boeng")
.AddPassenger(passenger => passenger.Name = "Robert")
.AddPassenger(passenger => passenger.Name = "Johnny");
如上所示,我创建了一个PlaneBuilder
类来链接此类方法。第一种方法AddPlane
可以正常工作,但是链式方法AddPassenger
不能按预期工作。我缺乏对代表action<T>
和Func<T,TResult>
的理解,这是一个严重的问题。
这是我尝试过的方法,但是我无法将string
隐式转换为Passenger
:
public PlaneBuilder<T> AddPassenger(Func<Passenger,Passenger> callback)
{
var passenger = callback(new Passenger());
_planeContext.Passengers.Add(passenger);
return this;
}
当前,PlaneBuilder
类的外观如下:
class PlaneBuilder<T>
{
private PlaneContext _planeContext = new PlaneContext();
public PlaneBuilder<T> AddPlane(action<PlaneContext> callback)
{
callback(_planeContext);
return this;
}
public PlaneBuilder<T> AddPassenger(Func<Passenger,Passenger> callback)
{
// goal is to create a passenger
// Add it to the passengers list in PlaneContext
var passenger = callback(new Passenger());
_planeContext.Passengers.Add(passenger);
return this;
}
}
最后,这是PlaneContext
类:
class PlaneContext
{
public string Name { get; set; }
public string Model { get; set; }
public List<Passenger> Passengers { get; set; }
}
简而言之,如何使用回调将乘客添加到PlaneContext
?