71 votes

Vous essayez d'ajouter AutoMapper à Asp.net Core 2 ?

J'ai travaillé sur un asp.net de base 1.1 projet il y a un moment et de les utiliser dans les travaux AutoMapper.

dans asp.net de base 1.1, je rajoute services.AddAutoMapper() dans le fichier de démarrage :

Fichier de démarrage dans asp.net de base 1.1:

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

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

Et j'utilise AutoMapper dans le Contrôleur facilement.

Contrôleur :

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

Et tout allait bien. Mais je suis actuellement en train de travailler sur un Asp.net Core 2 projet et je reçois le message d'erreur avec services.AddAutoMapper() dans sturtap fichier.

Erreur CS0121 L'appel est ambigu entre les méthodes suivantes ou propriétés: 'ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Assemblée []) " et " ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Type[])'

Quelle est la raison de cette erreur? Aussi, services.AddAutoMapper dans asp.net core 2 a quelques paramètres. que dois-je envoyer à ce paramètre?

173voto

dev-siberia Points 301

Si vous utilisez AspNet Core 2.2 et AutoMapper.Extensions.Microsoft.DependencyInjection v6.1 Vous devez utiliser dans le fichier Startup

43voto

Tseng Points 2687

Il est probable que vous mis à jour votre ASP.NET Base de dépendances, mais encore à l'aide obsolète AutoMapper.Extensions.Microsoft.DependencyInjection package.

Pour ASP.NET de Base vous avez besoin d'au moins la Version 3.0.1 de https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/3.0.1

Les références AutoMapper 6.1.1 ou plus.

AutoMapper (>= 6.1.1)

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

Microsoft.Extensions.DependencyModel (>= 2.0.0)

Les anciens paquets dépendent Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0 et ne peut pas être utilisé avec ASP.NET puisque il y a eu des modifications importantes entre Microsoft.Extensions.DependencyInjection.Abstractions 1.1.0 et 2.0

16voto

Mohammad Points 2448

Dans la nouvelle version (6.1) du `` paquet nuget, vous devez l'utiliser comme suit:

9voto

Yasen Raykov Points 79

Aucun de ces fonctionné pour moi, j'ai un .NET de Base du projet 2.2 et le code complet de la configuration de la mappeur ressemble à ceci(partie de ConfigureService() la méthode):

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

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

Ensuite, j'ai mon Mappages de classe que j'ai placé dans le BL projet:

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

Et enfin l'utilisation de la mappeur ressemble à ceci:

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

Voici un lien similaire sur le même sujet: Comment le programme d'installation Automapper dans ASP.NET de Base

4voto

CodeRed Points 783

J'ai résolu cela en créant une classe qui hérite``

Et en ajoutant cette ligne dans le `` :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X