В моем приложении я использую AutoMapper для сопоставления своих сущностей. Я также использую AutoFa c для разрешения моих зависимостей.
Я регистрирую свои зависимости:
builder.RegisterType<LineConfigItemViewModel>().As<ILineConfigItemViewModel>().InstancePerDependency();
Я добавляю этот профиль в AutoMapper
public class AutomapProfile : Profile
{
public AutomapProfile()
{
CreateMap<LineConfigEntry_DTO, ILineConfigItemViewModel>();
}
}
На месте где я хочу использовать сопоставленные объекты, я делаю это:
var mappedItems = _mapper.Map<IEnumerable<ILineConfigItemViewModel>>(tableLineConfigEntries);
Но здесь я получаю в результате некоторые объекты типа Proxy_...._ILineConfigItemViewModel_132339_
Так что я попробовал это в моем AutoMapperProfile:
public AutomapProfile()
{
CreateMap<LineConfigEntry_DTO, ILineConfigItemViewModel>().As(LineConfigItemViewModel);
}
Это работает, но мне не нравится это решение, поскольку оно связано с реализацией LineConfigItemViewModel.
Так что я наконец-то решил это так:
public AutomapProfile(Type type)
{
CreateMap<LineConfigEntry_DTO, ILineConfigItemViewModel>().As(type);
}
builder.Register(context =>
{
var mapperConfig = new MapperConfiguration(x => x.AddProfile(new AutomapProfile(context.Resolve<ILineConfigItemViewModel>().GetType())));
return new Mapper(mapperConfig);
}).As<IMapper>().SingleInstance();
Но это мне кажется довольно сложным. И если я хочу расширить профиль с помощью большего количества сопоставлений одного и того же вида, я должен каждый раз добавлять в конструктор другой тип.
Теперь вопрос:) Есть ли проще / лучший способ разрешить сопоставление? Или вы уже видите проблемы в общем подходе?