Пытаетесь добавить AutoMapper в Asp.net Core 2? - PullRequest
0 голосов
/ 18 мая 2018

Я работал над проектом asp.net core 1.1 некоторое время назад и использую его в projetc AutoMapper.

в asp.net core 1.1, я добавляю services.AddAutoMapper() в файл запуска:

Файл запуска в ядре asp.net 1.1:

    public void ConfigureServices(IServiceCollection services)
    {
        //Some Code

        services.AddMvc();
        services.AddAutoMapper();
    }

И я легко использую AutoMapper в контроллере.

Контроллер:

 public async Task<IActionResult> AddEditBook(AddEditBookViewModel model)
 {
    Book bookmodel = AutoMapper.Mapper.Map<AddEditBookViewModel, Book>(model);
    context.books.Add(bookmodel);
    context.SaveChanges();
 }

И все было хорошо.Но в настоящее время я работаю над проектом Asp.net Core 2 и получаю ошибку с services.AddAutoMapper() в файле sturtap.

Ошибка CS0121 Вызов неоднозначен между следующими методами или свойствами: 'ServiceCollectionExtensions.AddAutoMapper (IServiceCollection, params Assembly []) 'и' ServiceCollectionExtensions.AddAutoMapper (IServiceCollection, params Type []) '

В чем причина этой ошибки?Кроме того, services.AddAutoMapper в asp.net core 2 имеет некоторые параметры.что мне отправить на этот параметр?

Ответы [ 4 ]

0 голосов
/ 16 июня 2019

Ничего из этого не помогло мне, у меня есть проект .NET Core 2.2, и полный код для настройки сопоставления выглядит следующим образом ( часть метода ConfigureService () ):

    // Auto Mapper Configurations
    var mappingConfig = new MapperConfiguration(mc =>
    {
        mc.AddProfile(new SimpleMappings());
    });

    IMapper mapper = mappingConfig.CreateMapper();
    services.AddSingleton(mapper);

Тогда у меня есть класс Mappings, который я поместил в проект BL:

public class SimpleMappings : Profile
    {
        public SimpleMappings()
        {
            CreateMap<DwUser, DwUserDto>();
            CreateMap<DwOrganization, DwOrganizationDto>();
        }
    }

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

public class DwUserService : IDwUserService
    {
        private readonly IDwUserRepository _dwUserRepository;
        private readonly IMapper _mapper;

        public DwUserService(IDwUserRepository dwUserRepository, IMapper mapper)
        {
            _dwUserRepository = dwUserRepository;
            _mapper = mapper;
        }

        public async Task<DwUserDto> GetByUsernameAndOrgAsync(string username, string org)
        {
            var dwUser = await _dwUserRepository.GetByUsernameAndOrgAsync(username, org).ConfigureAwait(false);
            var dwUserDto = _mapper.Map<DwUserDto>(dwUser);

            return dwUserDto;
        }
}

Вотаналогичная ссылка на ту же тему: Как настроить Automapper в ASP.NET Core

0 голосов
/ 06 мая 2019

В новой версии (6.1) пакета AutoMapper.Extensions.Microsoft.DependencyInjection nuget вы должны использовать его следующим образом:

services.AddAutoMapper(Type assemblyTypeToSearch);
// OR
services.AddAutoMapper(params Type[] assemblyTypesToSearch);
0 голосов
/ 06 мая 2019

Если вы используете AspNet Core 2.2 и AutoMapper.Extensions.Microsoft.DependencyInjection v6.1 Вы должны использовать в файле запуска

services.AddAutoMapper(typeof(Startup));
0 голосов
/ 18 мая 2018

Вы, вероятно, обновили свои зависимости ASP.NET Core, но все еще используете устаревший пакет AutoMapper.Extensions.Microsoft.DependencyInjection.

Для ASP.NET Core вам нужна как минимум версия 3.0.1 из https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/3.0.1

Какие ссылки AutoMapper 6.1.1 или выше.

AutoMapper (> = 6.1.1)

Microsoft.Extensions.DependencyInjection.Abstractions (> = 2.0.0)

Microsoft.Extensions.DependencyModel (>= 2.0.0)

Старые пакеты зависят от Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0 и не могут быть использованы с ASP.NET Core, поскольку произошли критические изменения между Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0 и2,0

...