Я не видел ничего встроенного в Виндзор, чтобы сделать что-то подобное. Я думаю о HandlerSelector, но когда селектор работает, вы не знаете тип, который запрашивает зависимость, чтобы это не помогло.
Вы можете использовать TypedFactoryFacility . Просто создайте интерфейс для возврата ваших объектов IService (версия C #):
public interface IProviderFactory
{
IService GetServiceOne();
IService GetServiceTwo();
IService GetServiceThree();
}
Затем назовите ваши экземпляры IService как "ServiceOne", "ServiceTwo" и т. Д. *
Component.For<IService>().ImplementedBy<ServiceOne>().Named("ServiceOne"),
Component.For<IService>().ImplementedBy<ServiceTwo>().Named("ServiceTwo"),
Component.For<IService>().ImplementedBy<ServiceThree>().Named("ServiceThree"),
Затем сделайте своих поставщиков зависимыми от фабрики и вызовите соответствующий метод «Get»:
public class ServiceOneProvider
{
public ServiceOneProvider(IProviderFactory factory)
{
var service = factory.GetServiceOne();
}
}
public class ServiceTwoProvider
{
public ServiceTwoProvider(IProviderFactory factory)
{
var service = factory.GetServiceTwo();
}
}
public class ServiceThreeProvider
{
public ServiceThreeProvider(IProviderFactory factory)
{
var service = factory.GetServiceThree();
}
}