我正在使用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
?
这是如上所述解决我的问题的方法:
首先,列表必须在PlaneContext
类中初始化,例如:
public List<Passenger> Passengers = new List<Passenger>();
[第二,为了将一个乘客添加到Passengers
列表中:创建一个Passenger
类的新实例,将其作为参数传递给callback
方法,然后将其添加到passengers
列表中,如下所示:
public PlaneBuilder<T> AddPassenger(Action<Passenger> callback)
{
var passenger = new Passenger();
callback(passenger);
_planeContext.Passengers.Add(passenger);
return this;
}