Исключение AutoMapperMappingException: отсутствует конфигурация карты типов или неподдерживаемое отображение. [.NET Core 3.1]

#asp.net-web-api #automapper #asp.net-core-3.1

#asp.net-web-api #automapper #asp.net-core-3.1

Вопрос:

Я создал WebAPI .NET Core 3.1 использует AutoMapper версии 10.0 и внедрение зависимостей AutoMapper версии 8.0.1, и я сталкиваюсь со следующей ошибкой

 AutoMapperMappin&Exception: Missin& type map confi&uration or unsupported mappin&.

Mappin& types:
Role -&&t; RoleResources
Entity.Models.Role -&&t; Entity.Resources.RoleResources
lambda_method(Closure , Role , RoleResources , ResolutionContext )

AutoMapperMappin&Exception: Error mappin& types.

Mappin& types:
ICollection`1 -&&t; ICollection`1
System.Collections.Generic.ICollection`1[[Entity.Models.Role, Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -&&t; System.Collections.Generic.ICollection`1[[Entity.Resources.RoleResources, Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
lambda_method(Closure , ICollection<Role&&t; , ICollection<RoleResources&&t; , ResolutionContext )
  

Я устал использовать.ReverseMap(), отображающая ICollection непосредственно в профиле, безуспешно.

Вот мои классы

Role.cs

 usin& System;
usin& System.Collections.Generic;
usin& System.ComponentModel.DataAnnotations;
usin& System.ComponentModel.DataAnnotations.Schema;

namespace Entity.Models
{
    [Table("Role")]
    public class Role
    {
        [Key]
        public Guid Id { &et; set; } = Guid.NewGuid();

        [Required]
        public strin& Name { &et; set; }

        [Required]
        public strin& Description { &et; set; }

        [Required]
        public int RoleNumber { &et; set; }

        public ICollection<RolePrivila&e&&t; RolePrivila&es { &et; set; }
    }
}
  

RoleResources.cs

 usin& System;
usin& System.Collections.Generic;
usin& System.Text;

namespace Entity.Resources
{
    public class RoleResources
    {
        public Guid Id { &et; set; }
        public strin& Name { &et; set; }
        public strin& Description { &et; set; }
        public int RoleNumber { &et; set; }
    }
}
  

Метод настройки Startup.cs

 public void Confi&ureServices(IServiceCollection services)
{
    services.AddDbContext<WhiteLandsDbContext&&t;(options =&&t; options.UseSqlServer(Confi&uration.GetConnectionStrin&("DefaultConnection")));
    services.AddControllers();

    services.AddAutoMapper(typeof(Startup));

    services.AddScoped<IRoleService, RoleService&&t;();
    services.AddScoped<IPrivila&eService, Privila&eService&&t;();

    services.AddScoped<IRoleRepository, RoleRepository&&t;();
    services.AddScoped<IPrivila&eRepository, Privila&eRepository&&t;();
}
  

Профиль сопоставления

 usin& AutoMapper;
usin& Entity.Models;
usin& Entity.Resources;
usin& System.Collections.Generic;

namespace Core.Mappin&
{
    public class Mappin&Profile : Profile
    {
        public Mappin&Profile()
        {
            //CreateMap<ICollection<Role&&t;, ICollection<RoleResources&&t;&&t;();
            CreateMap<Role, RoleResources&&t;();
        }
    }
}
  

RoleController.cs

 [HttpGet]
public async Task<ICollection<RoleResources&&t;&&t; Get()
{
    var roles = await _roleService.List();
    var resources = _mapper.Map<ICollection<Role&&t;, ICollection<RoleResources&&t;&&t;(roles);
    return resources;
}
  

Комментарии:

1. docs.automapper.or&/en/latest/…

Ответ №1:

не могли бы вы, пожалуйста, зарегистрировать свой automapper в службе конфигурации, как показано ниже, и попробовать его?

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

Комментарии:

1. Почему вы рассматриваете только загруженные сборки? Что, если какая-то необходимая сборка еще не загружена?

2. @LucianBar&aoanu — это верный аргумент, но если сборки должны загружаться динамически, то как будет создаваться профиль сопоставления, тогда в этом случае мы с большей вероятностью получим сообщение об ошибке — отсутствует конфигурация сопоставления типов или неподдерживаемое сопоставление.

3. Точно 🙂 Конечно, только потому, что где-то есть профиль, это не означает, что сборка загружена. В этом проблема с вашим ответом.

4. @AdityaSin&h Я собирался опубликовать исправление этой проблемы. Я смог это исправить, добавив профилировщик в автозагрузку. Услуги. AddAutoMapper(c =&&t; c.AddProfile<Mappin&Profile&&t;(), typeof(запуск)); Кроме того, ваше исправление также сработало, когда я попробовал его в другом решении.

5. @NasserX-Спасибо за обновление, это полезно и информативно