спасибо я прочитаю эти статьи.

я есть сервис с двумя различными реализациями, и я хотел бы внедрить его в конструктор контроллеров, в зависимости от критериев (на данный момент критерием является простое значение, хранящееся в сеансе).

Вот что я получил сейчас ...

Сервисный интерфейс:

public interface IService
{
    string GetSampleText();
}

Реализация № 1:

public class FirstService : IService
{
    string GetSampleText()
    {
        return "First Service";
    }
}

Реализация № 2:

public class SecondService : IService
{
    string GetSampleText()
    {
        return "Second Service";
    }
}

Регистрация в классе установщика Windsor:

container.Register(AllTypes
  .FromAssemblyInDirectory(new AssemblyFilter(HttpRuntime.BinDirectory))
  .BasedOn<IService>()
  .WithService.FromInterface()
  .Configure(c => c.LifeStyle.Transient));

container.Kernel.AddHandlerSelector(new ServiceHandlerSelector());

Я реализовал IHandlerSelector:

public class ServiceHandlerSelector : IHandlerSelector { ... }

В методе HasOpinionAbout этой реализации IHandlerSelector я могу решить, какой обработчик будет выбран в методе SelectHandler (зависит от значения из сеанса).

Тогда инжектор конструктора работает нормально на контроллерах:

public MyController(IService service) { ... }

Итак, я получил рабочее решение, но я не уверен, что это лучший способ сделать это.

Мнения? Предложения?

Большое спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос