我编写了一个由多个类实现的接口(interface)。我想编写一个Service类,它将所有注册的实现注入(inject)其ctor中。

我能想到的唯一解决方案是在ctor中调用Service Locator,并要求它对所有实现进行Resolve()。

理想情况下,我想要这样的东西-

interface IVehicle
{
    void Start();
}

class Car : IVehicle
{
    public void Start()
    {
        Console.WriteLine("Car started.");
    }
}

class Truck : IVehicle
{
    public void Start()
    {
        Console.WriteLine("Truck started.");
    }
}

class Motorbike : IVehicle
{
    public void Start()
    {
        Console.WriteLine("Motorbike started.");
    }
}

class VehicleService
{
    // How do I inject all implementations of IVehicle?
    public VehicleService(IEnumerable<IVehicle> vehicles)
    {
        foreach (var vehicle in vehicles)
        {
            vehicle.Start();
        }
    }
}

编辑-我应该提到我正在使用温莎城堡。

最佳答案

您必须使用CollectionResolver。检查此Castle Windsor FAQ:



到城堡解析器的直接链接:Resolvers

10-06 11:46