Найден несопоставленный объект Automapper - PullRequest
0 голосов
/ 26 августа 2018

Привет, ребята. Я нашел очень странную вещь и хочу спросить вас об этом.Я использую AutoMaper в своем проекте .dotnet core Web Api.И во время сопоставления я получаю AutoMapperConfigurationException.

Вот ссылка, которую я сейчас использую:

<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="5.0.1" />

У меня есть класс сущности Blog:

public class BlogEntity 
{
   public string Title { get; set; }
   public int BlogEntityId { get; set; }
   public List<Post> Posts { get; set; }
}

И мойКласс DTO, который я использую для создания новой пустой записи блога:

public class BlogCreateDto
{
   public string Title { get; set; }
}

Вот мой профиль маппера:

  public class BlogMappingProfile  : Profile
    {
        public BlogMappingProfile()
        {
            CreateMap<BlogCreateDto,BlogEntity>();

        }
    }

Вот строка, которую я использовал в Startup.cs длянастроить automapper

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


            services.AddAutoMapper();
....

Вот сообщение, которое я получаю в исключении:

Найдены не отображенные элементы.Просмотрите приведенные ниже типы и элементы. \ NДобавьте пользовательское выражение сопоставления, игнорируйте, добавьте настраиваемый преобразователь или измените тип источника / назначения \ nНе подходящего конструктора, добавьте c-аргумент без аргументов, добавьте необязательные аргументы или сопоставьте всепараметры конструктора \ n =============================================================== \ r \ nAutoMapper создал эту карту типов для вас, но ваши типы не могут быть отображены с использованием текущей конфигурации.

Я много чего пробовал,Игнорирование членов, конструкторов, наследования и т. Д., И никто из них не работал.Я решил это, добавив конфигурацию в Startup.cs и вручную добавив свой профиль автоматического средства:

        services.AddAutoMapper(cfg => cfg.AddProfile(new BlogMappingProfile()));

Это работает, но все же у меня возникает путаница по поводу того, что я что-то упустил и не делал этого вправильно.Что я делаю не так?Или, может быть, я что-то упустил в конфигурации?

1 Ответ

0 голосов
/ 26 августа 2018

Вы должны предоставить сборки или сборку, где расположены ваши профили. Расширение использует сборку-сканирование, чтобы найти данные типы для регистрации. Если ваши профили находятся в том же проекте, что и класс запуска, вы можете сделать следующее

services.AddAutoMapper(typeof(Startup).Assembly);

Это также потребуется для автоматической регистрации всех других типов AutoMapper, например, IValueResolver<,,> и ITypeConverter<,>.

Вы можете найти процесс регистрации этого расширения здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...