У меня есть сервис с двумя различными реализациями, и я хотел бы внедрить его в конструктор контроллеров, в зависимости от критерия (на данный момент критерием является простое значение, сохраняемое в сеансе).
Вот чтоЯ получил сейчас ...
Сервисный интерфейс:
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) { ... }
Итак, я получил рабочее решение, но я не уверен, если онолучший способ сделать это.
Мнения?Предложения?
Большое спасибо.