Не удается настроить Automapper для проектирования элементов интерфейса с помощью QueryableExtensions.ProjectTo - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь настроить autopper для использования функции ProjectTo. Проблема в том, что объект, который я пытаюсь извлечь из базы данных, содержит элемент интерфейса. Физически все IInnerItems производные хранятся в 2 таблицах. Значения элемента Inner должны быть разрешены автоматически (без создания объекта вручную и заполнения его всеми значениями). Содержащий объект также содержит значение перечисления, которое можно использовать для определения типа внутреннего объекта. QueryableExtensions не поддерживает MapFrom и ConvertUsing методы, основанные на выражениях, поэтому я не могу автоматически сопоставить innerItem.

Полученное исключение:

Тип 'IInnerItem' не имеет конструктора по умолчанию

Это примерно то, что я пытаюсь сделать:

    // class structure

    public interface IInnerItem { ... }

    public class InnerItem1 : IInnerItem { ... }

    public class InnerItem2 : IInnerItem { ... }


    public class InnerItemDto { ... }

    public class InnerItemDto1 : InnerItemDto { ... }

    public class InnerItemDto2 : InnerItemDto { ... }


    public class MainObject {
        public IInnerItem InnerItem { get; set;}
        public InnerItemType Type { get; set; }
        // ...
    }

    public class MainObjectDto {
        public InnerItemDto InnerItem { get; set;}
        public InnerItemType Type { get; set; }
        // ...
    }

    // mapping config

    CreateMap<MainObjectDto, MainObject>()
        .ForMember(x => x.InnerItem, opt => opt.MapFrom(src => src.InnerItem));

    CreateMap<InnerItemDto, IInnerItem>()
        .Include<InnerItemDto, InnerItem1>()
        .Include<InnerItemDto, InnerItem2>();

    CreateMap<InnerItemDto1, InnerItem1>();

    CreateMap<InnerItemDto2, InnerItem2>();

Заранее спасибо!

...