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