Qual é a melhor prática para implementar a multilocação no ASP.NET MVC usando o Castle Windsor?
Eu tenho um serviço com duas implementações diferentes e gostaria de injetar no construtor de controladores, depende de um critério (no momento, o critério é um valor simples armazenado na sessão).
Aqui está o que eu tenho agora ...
Interface de serviço:
public interface IService
{
string GetSampleText();
}
Implementação nº 1:
public class FirstService : IService
{
string GetSampleText()
{
return "First Service";
}
}
Implementação # 2:
public class SecondService : IService
{
string GetSampleText()
{
return "Second Service";
}
}
Registro em uma classe de instalador do Windsor:
container.Register(AllTypes
.FromAssemblyInDirectory(new AssemblyFilter(HttpRuntime.BinDirectory))
.BasedOn<IService>()
.WithService.FromInterface()
.Configure(c => c.LifeStyle.Transient));
container.Kernel.AddHandlerSelector(new ServiceHandlerSelector());
Eu implementei um IHandlerSelector:
public class ServiceHandlerSelector : IHandlerSelector { ... }
No método HasOpinionAbout desta implementação IHandlerSelector, posso decidir qual manipulador será selecionado no método SelectHandler (depende do valor da sessão).
Então a injeção do construtor está funcionando bem nos controladores:
public MyController(IService service) { ... }
Então, eu tenho uma solução funcional, mas não tenho certeza se é a melhor maneira de fazer isso.
Opiniões? Sugestões?
Muito Obrigado.