У меня есть этот интерфейс для использования AutoMapper:
public interface IMapper
{
object Map(object source, Type sourceType, Type destinationType);
}
Тогда для каждого типа данных у меня есть свой класс сопоставления, например:
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);
}
}
Тогда у меня есть IMapper как один из параметров в моем классе контроллера, как это:
public UsersController(IUsersRepository repo, IMapper userMapper)
{....}
Я использую Windsor в качестве IOC для своего приложения, и проблема в том, что я хочу зарегистрировать компоненты, чтобы при запуске в UsersController он использовал класс UserMapper, а при работе с ProductsController он использовал мой класс ProductMapper.
Мой регистрационный код выглядит примерно так:
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"))
)
Я сделал свою домашнюю работу в google и stackoverflow, и я знаю, что мне нужно использовать ServicesOverride, но я все еще застрял в этом, может кто-нибудь помочь мне, пожалуйста?
Спасибо