我编写了一个由多个类实现的接口(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。