如何按照Fluent Builder模式在回调中向上下文添加值

问题描述 投票:0回答:1

我正在使用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

c# callback delegates builder fluent
1个回答
1
投票

这是如上所述解决我的问题的方法:

首先,列表必须在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.