Создать карту с Interface-Destination, которая должна быть решена AutoFac - PullRequest
0 голосов
/ 08 апреля 2020

В моем приложении я использую 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();

Но это мне кажется довольно сложным. И если я хочу расширить профиль с помощью большего количества сопоставлений одного и того же вида, я должен каждый раз добавлять в конструктор другой тип.

Теперь вопрос:) Есть ли проще / лучший способ разрешить сопоставление? Или вы уже видите проблемы в общем подходе?

...