Castle Windsor: Как внедрить все реализации интерфейса в ctor?

Я написал интерфейс, который реализуется несколькими классами. Я хочу написать класс службы, в котором все зарегистрированные реализации будут внедрены в его ctor.

Единственное решение, которое я могу придумать, это вызвать Service Locator внутри ctor и попросить его 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();
        }
    }
}

РЕДАКТИРОВАТЬ - Я должен упомянуть, что использую Castle Windsor.

26
задан empi 4 May 2012 в 16:06
поделиться