Registro del componente basado en el nombre del parámetro en el solicitante en windsor
Tengo esta interfaz para usar AutoMapper:
public interface IMapper
{
object Map(object source, Type sourceType, Type destinationType);
}
ntonces, para cada tipo de datos, tengo una clase de asignador diferente, por ejemplo:
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);
}
}
Entonces tengo IMapper como uno de los parámetros en mi clase de controlador como este:
public UsersController(IUsersRepository repo, IMapper userMapper)
{....}
Estoy usando Windsor como IOC para mi aplicación y el problema es que quiero registrar los componentes, de modo que cuando se ejecuta en UsersController, use la clase UserMapper y si se ejecuta en ProductsController usará mi clase ProductMapper.
Mi código de registro parece algo similar a esto:
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"))
)
He hecho mi tarea en google y stackoverflow, y sé que necesito usar ServicesOverride pero todavía estoy atascado en esto, ¿alguien podría echarme una mano por favor?
Gracia