Профили Automapper не загружаются в автозагрузке?

Я использую:

  • AutoMapper 6.1.1
  • AutoMapper.Extensions.Microsoft.DependencyInjection 3.0.1

Похоже, мои профили не загружаются, каждый 9X_c#.net раз, когда я вызываю mapper.map, я получаю 9X_c#-language AutoMapper.AutoMapperMappingException: «Отсутствует конфигурация карты типов или неподдерживаемое сопоставление».

Здесь мой метод ConfigureServices класса 9X_asp.net-core-2.0 Startup.cs

 // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        //register automapper

        services.AddAutoMapper();
        .
        .
    }

В другом проекте под названием 9X_automapper xxxMappings у меня есть профили отображения. Пример 9X_.cs-file класса

public class StatusMappingProfile : Profile
{
    public StatusMappingProfile()
    {
        CreateMap()
         .ForMember(t => t.Id, s => s.MapFrom(d => d.Id))
         .ForMember(t => t.Title, s => s.MapFrom(d => d.Name))
         .ForMember(t => t.Color, s => s.MapFrom(d => d.Color));

    }

    public override string ProfileName
    {
        get { return this.GetType().Name; }
    }
}

И вызовите карту таким образом в классе 9X_.cs-file обслуживания

    public StatusDTO GetById(int statusId)
    {
        var status = statusRepository.GetById(statusId);
        return mapper.Map(status); //map exception here
    }

status имеет значения после 9X_csharp вызова statusRepository.GetById

Для моих 9X_.cs-file классов профиля, если вместо наследования 9X_automapper от профиля я наследую от MapperConfigurationExpression, я 9X_c-sharp получил модульный тест, подобный приведенному 9X_c-sharp ниже, в котором говорится, что сопоставление 9X_c# хорошее.

    [Fact]
    public void TestStatusMapping()
    {
        var mappingProfile = new StatusMappingProfile();

        var config = new MapperConfiguration(mappingProfile);
        var mapper = new AutoMapper.Mapper(config);

        (mapper as IMapper).ConfigurationProvider.AssertConfigurationIsValid();
    }

Я предполагаю, что мои сопоставления 9X_c# не инициализируются. Как я могу это проверить? Я 9X_asp.net-core-2.0 что-то упускаю? Я видел перегрузку метода 9X_c#-language AddAutoMapper()

services.AddAutoMapper(params Assembly[] assemblies)

Следует ли передавать все 9X_asp.net-core-2.0 сборки в моем проекте xxxMappings. Как я 9X_automapper могу это сделать?

13
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Профили Automapper не загружаются в автозагрузке?

Разобрался. Поскольку мои сопоставления 9X_csharp находятся в другом проекте, я сделал две 9X_c# вещи

  1. Из моего проекта API (где находится Startup.cs, добавлена ​​ссылка на мой проект xxxMapprings)
  2. в ConfigureServices я использовал перегрузку 9X_asp.net-core-2.0 AddAutoMapper, которая получает сборку:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    
        //register automapper
        services.AddAutoMapper(Assembly.GetAssembly(typeof(StatusMappingProfile))); //If you have other mapping profiles defined, that profiles will be loaded too.
    

16
0

Ответ #2

Ответ на вопрос: Профили Automapper не загружаются в автозагрузке?

Еще одно решение для устранения проблемы, когда 9X_csharp у нас есть сопоставление профилей в разных 9X_c-sharp проектах в решении:

services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

3
0