Je suis relativement nouveau chez .NET et j'ai décidé de m'attaquer à .NET Core au lieu d'apprendre les "anciennes méthodes". J'ai trouvé un article détaillé sur la configuration d'AutoMapper pour .NET Core ici , mais existe-t-il une procédure plus simple pour un débutant?
c#
asp.net-core
automapper
theutz
la source
la source
Réponses:
Je l'ai compris! Voici les détails:
Ajoutez le package d'injection de dépendances AutoMapper à votre solution via NuGet .
Créez une nouvelle classe pour un profil de mappage. (J'ai créé une classe dans le répertoire principal de la solution appelée
MappingProfile.cs
et ajoutez le code suivant.) Je vais utiliser un objetUser
etUserDto
comme exemple.Ajoutez ensuite la configuration AutoMapperConfiguration
Startup.cs
comme indiqué ci-dessous:Pour appeler l'objet mappé dans du code, procédez comme suit:
J'espère que cela aide quelqu'un à recommencer avec ASP.NET Core! Je me réjouis de tout commentaire ou critique car je suis encore nouveau dans le monde .NET!
la source
Profile
classes sont situéesÉtape pour utiliser AutoMapper avec ASP.NET Core.
Étape 1. Installation d'AutoMapper.Extensions.Microsoft.DependencyInjection à partir du package NuGet.
Étape 2. Créez un dossier dans la solution pour conserver les mappages avec le nom "Mappings".
Étape 3. Après avoir ajouté le dossier Mapping, nous avons ajouté une classe avec le nom " MappingProfile ", ce nom peut être unique et bon à comprendre.
Dans cette classe, nous allons maintenir tous les mappages.
Étape 4. Initialisation du mappeur au démarrage "ConfigureServices"
Dans la classe de démarrage, nous devons initialiser le profil que nous avons créé et également enregistrer le service AutoMapper.
Extrait de code pour afficher la méthode ConfigureServices où nous devons initialiser et enregistrer AutoMapper.
Étape 5. Obtenez la sortie.
Pour obtenir le résultat mappé, nous devons appeler AutoMapper.Mapper.Map et transmettre la destination et la source appropriées.
Extrait de code
la source
'Mapper' does not contain a definition for 'initialize'
. J'utilise laAutoMapper.Extensions.Microsoft.DependencyInjection
version 7.0.0Je veux étendre les réponses de @ theutz - à savoir cette ligne:
Il existe un bogue ( probablement ) dans AutoMapper.Extensions.Microsoft.DependencyInjection version 3.2.0. (J'utilise .NET Core 2.0)
Ceci est abordé dans ce numéro GitHub. Si vos classes héritant de la classe Profile d'AutoMapper existent en dehors de l'assembly où votre classe de démarrage est, elles ne seront probablement pas enregistrées si votre injection AutoMapper ressemble à ceci:
sauf si vous spécifiez explicitement les assemblys pour lesquels rechercher les profils AutoMapper.
Cela peut être fait comme ceci dans votre Startup.ConfigureServices:
où "assemblies" et "type_in_assemblies" pointent vers l'assembly où les classes de profil dans votre application sont spécifiées. Par exemple:
Je suppose (et j'insiste sur ce mot) qu'en raison de l'implémentation suivante de la surcharge sans paramètre (code source de GitHub ):
nous comptons sur CLR ayant déjà un assemblage JITed contenant des profils AutoMapper qui peuvent être ou ne pas être vrais car ils ne sont jitted que lorsque cela est nécessaire (plus de détails dans cette question StackOverflow).
la source
la réponse de theutz ici est très bonne, je veux juste ajouter ceci:
Si vous laissez votre profil de mappage hériter de
MapperConfigurationExpression
au lieu deProfile
, vous pouvez très simplement ajouter un test pour vérifier votre configuration de mappage, ce qui est toujours pratique:la source
Je l'ai résolu de cette façon (similaire à ci-dessus mais j'ai l'impression que c'est une solution plus propre) pour .NET Core 2.2 / Automapper 8.1.1 w / Extensions.DI 6.1.1.
Créer la classe MappingProfile.cs et remplir le constructeur avec Maps (je prévois d'utiliser une seule classe pour contenir tous mes mappages)
Dans Startup.cs, ajoutez ci-dessous pour ajouter à DI (l'argument d'assembly est pour la classe qui contient vos configurations de mappage, dans mon cas, c'est la classe MappingProfile).
Dans Controller, utilisez-le comme n'importe quel autre objet DI
la source
MappingProfiles
avecnew Type[]{}
comme indiqué dans cette réponse n'est pas nécessaire.Dans mon Startup.cs (Core 2.2, Automapper 8.1.1)
Dans mon projet d'accès aux données
Dans ma définition de modèle
la source
services.AddAutoMapper( typeof(DAL.MapperProfile) );
place deservices.AddAutoMapper(new Type[] { typeof(DAL.MapperProfile) });
?J'aime beaucoup de réponses, en particulier celle de @saineshwar. J'utilise .net Core 3.0 avec AutoMapper 9.0, donc je pense qu'il est temps de mettre à jour sa réponse.
Ce qui a fonctionné pour moi était dans Startup.ConfigureServices (...) enregistrez le service de cette manière:
Je pense que le reste de la réponse @saineshwar reste parfait. Mais si quelqu'un est intéressé, mon code de contrôleur est:
Et ma classe de cartographie:
----- ÉDITER -----
Après avoir lu les documents liés dans les commentaires de Lucian Bargaoanu, je pense qu'il vaut mieux changer un peu cette réponse.
Le sans paramètre
services.AddAutoMapper()
(qui avait la réponse @saineshwar) ne fonctionne plus (du moins pour moi). Mais si vous utilisez l'assembly NuGet AutoMapper.Extensions.Microsoft.DependencyInjection, le framework est capable d'inspecter toutes les classes qui étendent AutoMapper.Profile (comme la mienne, MappingProfile).Donc, dans mon cas, lorsque la classe appartient au même assembly d'exécution, l'enregistrement du service peut être raccourci
services.AddAutoMapper(System.Reflection.Assembly.GetExecutingAssembly());
(une approche plus élégante pourrait être une extension sans paramètre avec ce codage).
Merci, Lucian!
la source
J'utilise AutoMapper 6.1.1 et asp.net Core 1.1.2.
Tout d'abord, définissez les classes de profil héritées par Profile Class of Automapper. J'ai créé l'interface IProfile qui est vide, le but est seulement de trouver les classes de ce type.
Créez maintenant une classe séparée, par exemple Mappages
Maintenant, dans MVC Core web Project dans le fichier Startup.cs, dans le constructeur, appelez la classe Mapping qui initialisera tous les mappages au moment du chargement de l'application.
la source
Pour ASP.NET Core (testé avec 2.0+ et 3.0), si vous préférez lire la documentation source: https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/blob/master/README.md
Sinon, suivre ces 4 étapes fonctionne:
Installez AutoMapper.Extensions.Microsoft.DependancyInjection à partir de nuget.
Ajoutez simplement quelques classes de profil.
Ajoutez ensuite ci-dessous à votre classe startup.cs.
services.AddAutoMapper(OneOfYourProfileClassNamesHere)
Ensuite, injectez simplement IMapper dans vos contrôleurs ou là où vous en avez besoin:
Et si vous voulez utiliser ProjectTo c'est maintenant simplement:
la source
Pour AutoMapper 9.0.0:
MapperProfile:
Dans votre startup:
Dans le contrôleur ou le service: Injectez le mappeur:
Usage:
la source
Dans les dernières versions du noyau asp.net, vous devez utiliser l'initialisation suivante:
la source
Asp.Net Core 2.2 avec AutoMapper.Extensions.Microsoft.DependencyInjection.
Dans Startup.cs
la source
Pour ajouter à ce qu'Arve Systad a mentionné pour les tests. Si, pour une raison quelconque, vous êtes comme moi et que vous souhaitez conserver la structure d'héritage fournie dans la solution theutz, vous pouvez configurer la configuration de Mapper comme suit:
Je l'ai fait dans NUnit.
la source
services.AddAutoMapper (); n'a pas fonctionné pour moi. (J'utilise Asp.Net Core 2.0)
Après avoir configuré comme ci-dessous
initialiser le mappeur IMapper mapper = config.CreateMapper ();
et ajouter l'objet mappeur aux services en tant que services singleton. AddSingleton (mappeur);
de cette façon, je suis en mesure d'ajouter une DI au contrôleur
et j'ai utilisé comme ci-dessous dans mes méthodes d'action
la source
à propos de la réponse theutz, il n’est pas nécessaire de spécifier parramètre du mappeur IMapper au niveau du constructeur des contrôleurs.
vous pouvez utiliser le mappeur car il est un membre statique à n'importe quel endroit du code.
la source
IMapper
vous pouvez vous moquer de cela et, par exemple, le rendre simplement nul s'il n'est pas pertinent pour le test donné.