Automapper и Autofac

Я пытаюсь заставить Automapper хорошо играть с Autofac в приложении ASP.Net MVC.

Я следовал инструкциям в ответе на это: Autofac 3 и Automapper

Однако это не удается при первом вызове _mapper.Map<>(...)

Autofac настроен так:

builder.RegisterType<EntityMappingProfile>().As<Profile>();

builder.Register(ctx => new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers))
    .AsImplementedInterfaces()
    .SingleInstance()
    .OnActivating(x =>
    {
        foreach (var profile in x.Context.Resolve<IEnumerable<Profile>>())
        {
            x.Instance.AddProfile(profile);
        }
    });

builder.RegisterType<MappingEngine>().As<IMappingEngine>();

и затем в моем бизнес-слое у меня есть сервис как это:

public class LinkService : ILinkService
{
    private readonly ILinkRepository _linkRepository;
    private readonly IMappingEngine _mapper;
    public LinkService(ILinkRepository linkRepository, IMappingEngine mapper)
    {
        _linkRepository = linkRepository;
        _mapper = mapper;

    }

    public IEnumerable<LinkEntity> Get()
    {
        var links = _linkRepository.Get().ToList();
        return _mapper.Map<IEnumerable<Link>, IEnumerable<LinkEntity>>(links);
    }

    public LinkEntity GetById(int id)
    {
        var link = _linkRepository.GetById(id);
        return _mapper.Map<Link, LinkEntity>(link);
    }
}

Призыв к _mapper.Map<IEnumerable<Link>, IEnumerable<LinkEntity>>не удается с:

Отсутствует конфигурация карты типов или неподдерживаемое отображение.

Есть идеи, где я могу пойти не так?

1 ответ

Решение

Вам не хватает создания Mapper, создать карту Link to LinkEntity в EntityMappingProfile:

  internal class EntityMappingProfile :Profile
{
    protected override void Configure()
    {
        base.Configure();
        this.CreateMap<Link, LinkEntity>();
    }
}
Другие вопросы по тегам