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.

questionAnswers(1)

yourAnswerToTheQuestion