Registre o componente com base no nome do parâmetro no solicitante no windsor

Eu tenho essa interface para usar o AutoMapper:

public interface IMapper
{
    object Map(object source, Type sourceType, Type destinationType);
}

Em seguida, para cada tipo de dados, tenho uma classe de mapeador diferente, por exemplo:

 public class UserMapper : IMapper
{
    static UserMapper()
    {
        Mapper.CreateMap<User, UserViewModel>();
        Mapper.CreateMap<UserViewModel, User>();
    }

    public object Map(object source, Type sourceType, Type destinationType)
    {
        return Mapper.Map(source, sourceType, destinationType);
    }
}

Então, tenho o IMapper como um dos parametros na minha classe de controlador desta maneira:

public UsersController(IUsersRepository repo, IMapper userMapper)
{....}

Estou usando o Windsor como COI do meu aplicativo e o problema é que quero registrar os componentes, para que, ao executar no UsersController, use a classe UserMapper e, ao executar no ProductsController, use minha classe ProductMappe

Meu código de registro é semelhante ao seguinte:

container.Register(
    Component.For<IMapper>()
             .ImplementedBy<UsersMapper>()
             .Named("usersMapper"),
    Component.For<IMapper>()
             .ImplementedBy<ProductsMapper>()
             .Named("productsMapper"),
    Component.For<ProductController>()
             .ServiceOverrides(ServiceOverride.ForKey("usersMapper").Eq("productsMapper"))
)

Fiz minha lição de casa no google e no stackoverflow e sei que preciso usar o ServicesOverride, mas ainda estou preso a isso, alguém poderia me dar uma mão por favor?

Obrigad

questionAnswers(4)

yourAnswerToTheQuestion