wake-up-neo.com

Versuchen Sie, AutoMapper zu Asp.net Core 2 hinzuzufügen?

Ich habe vor einiger Zeit an einem asp.net Core 1.1-Projekt gearbeitet und es in projetc AutoMapper verwendet.

in asp.net Core 1.1 füge ich services.AddAutoMapper() in die Startdatei ein:

Startdatei in asp.net core 1.1:

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

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

Und ich benutze AutoMapper in Controller leicht.

Controller:

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

Und alles war gut. Aber ich arbeite gerade an einem Asp.net Core 2-Projekt und bekomme den Fehler mit services.AddAutoMapper() in der sturtap-Datei.

Fehler CS0121 Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften nicht eindeutig: 'ServiceCollectionExtensions.AddAutoMapper (IServiceCollection, params Assembly [])' und 'ServiceCollectionExtensions.AddAutoMapper (IServiceCollection, params Type [])'.

Was ist der Grund für diesen Fehler? Außerdem hat services.AddAutoMapper In asp.net core 2 einige Parameter. Was soll ich an diesen Parameter senden?

27
topcool

Sie haben wahrscheinlich Ihre ASP.NET Core-Abhängigkeiten aktualisiert, verwenden jedoch weiterhin veraltetes AutoMapper.Extensions.Microsoft.DependencyInjection Paket.

Für ASP.NET Core benötigen Sie mindestens Version 3.0.1 from https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/3.0.1

Welche Referenzen AutoMapper 6.1.1 oder höher.

AutoMapper (> = 6.1.1)

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

Microsoft.Extensions.DependencyModel (> = 2.0.0)

Die älteren Pakete sind abhängig von Microsoft.Extensions.DependencyInjection.Abstractions1.1.0 und kann nicht mit ASP.NET Core verwendet werden, da zwischen Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0 und 2.0

14
Tseng

Wenn Sie AspNet Core 2.2 und AutoMapper.Extensions.Microsoft.DependencyInjection v6.1 verwenden, müssen Sie in der Startdatei verwenden

services.AddAutoMapper(typeof(Startup));
78
dev-siberia

In der neuen Version (6.1) von AutoMapper.Extensions.Microsoft.DependencyInjection Nuget-Paket sollten Sie wie folgt verwenden:

services.AddAutoMapper(Type assemblyTypeToSearch);
// OR
services.AddAutoMapper(params Type[] assemblyTypesToSearch);
8
Mohammad Dayyan

Keines davon hat bei mir funktioniert, ich habe ein .NET Core 2.2-Projekt und der vollständige Code zum Konfigurieren des Mapper sieht so aus ( Teil der ConfigureService () -Methode ):

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

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

Dann habe ich meine Mappings-Klasse, die ich im BL-Projekt platziert habe:

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

Und schließlich sieht die Verwendung des Mapper so aus:

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;
        }
}

Hier ist ein ähnlicher Link zum selben Thema: So richten Sie Automapper in ASP.NET Core ein

4
Yasen Raykov

Die offiziellen Dokumente: https://automapper.readthedocs.io/en/latest/Dependency-injection.html#asp-net-core

Die Konfiguration legen Sie über Profile fest. Anschließend teilen Sie AutoMapper mit, in welchen Assemblys diese Profile definiert sind, indem Sie beim Start die IServiceCollection-Erweiterungsmethode AddAutoMapper aufrufen:

services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);

oder Markertypen:

services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);
1
Askar Rayapov

Ich habe das gelöst, indem ich eine Klasse erstellt habe, die AutoMapper.Profile

    public class model_to_resource_profile : Profile
    {
        public model_to_resource_profile()
        {
            CreateMap<your_model_class, your_model_resource_class>();
        }
    }

Und füge diese Zeile in das Startup.cs:

services.AddAutoMapper(typeof(model_to_resource_profile ));
0
CodeRed