Passer au contenu du pied de page
.NET AIDE

Automapper C# (Comment ça fonctionne pour les développeurs)

Automapper est une bibliothèque polyvalente et puissante en C# conçue pour faciliter le mapping objet-à-objet, rendant le transfert de données entre des modèles d'objets complexes plus facile et plus maintenable. Dans cet article, nous explorerons comment Automapper peut efficacement mapper les propriétés, aplatir les modèles d'objets complexes et travailler avec divers types d'objets comme les objets du domaine utilisateur et les objets de transfert de données.

Introduction à Automapper

Automapper en C# est un mappeur objet-objet, un outil qui simplifie la conversion et le transfert de données entre différents types d'objets. Cela est particulièrement utile dans les scénarios impliquant des entités de données et leur transformation en objets de transfert de données (DTOs).

Caractéristiques clés d'Automapper

  • Simplification du code : Automapper réduit drastiquement la nécessité de code manuel en automatisant le mapping des propriétés, prévenant ainsi les erreurs et économisant du temps.
  • Flexibilité dans les configurations de mapping : Automapper permet une personnalisation détaillée des configurations de mapping, accommodant une large gamme de scénarios de mapping.
  • Efficacité des performances : La bibliothèque est conçue pour gérer de grands et complexes modèles d'objets sans surcharge de performance significative.

Prise en main d'Automapper

Pour utiliser Automapper, il doit d'abord être installé via la console du gestionnaire de paquets, un composant de l'environnement de développement qui facilite la gestion des paquets logiciels.

Installation via la console du gestionnaire de paquets

Vous pouvez facilement installer Automapper dans votre projet en exécutant une simple commande dans votre console du gestionnaire de paquets :

Install-Package AutoMapper

Configurer la configuration de mapping de base

La première étape dans l'utilisation d'Automapper est de définir la configuration du mapping. Cela implique de spécifier comment les propriétés de l'objet d'entrée (source) doivent être transférées vers l'objet de sortie (destination).

var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
Dim config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel
  • Dans l'exemple ci-dessus, une configuration de mapping est créée pour mapper les propriétés de SourceClass à DestinationClass.
  • Une instance de IMapper est ensuite créée en utilisant cette configuration.

Techniques de mapping avancées avec Automapper

Les capacités d'Automapper s'étendent bien au-delà du simple mapping propriété à propriété. Il peut habilement gérer des scénarios plus complexes.

Aplatir les modèles d'objets complexes

L'une des forces d'Automapper est sa capacité à aplatir les modèles d'objets complexes. Cette fonctionnalité est particulièrement utile lorsqu'il s'agit d'objets imbriqués, permettant le mapping de ces propriétés imbriquées vers une structure de classe de destination plate.

Gestion polyvalente des types d'objets

Automapper peut efficacement mapper entre divers types d'objets, y compris les objets de domaine utilisateur, les DTOs, et même les modèles de vue, offrant une solution polyvalente pour différents besoins de transfert de données.

Exemples d'utilisation pratique

Pour mieux comprendre l'utilité d'Automapper, explorons quelques exemples pratiques.

Exemple 1 : Mapping simple

Considérons un scénario où nous devons mapper des propriétés d'une entité utilisateur à un DTO utilisateur :

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
Public Class User
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

Public Class UserDTO
	Public Property FullName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private user As New User With {
	.FirstName = "John",
	.LastName = "Doe",
	.Address = "123 Street",
	.City = "CityName"
}
Private userDto As UserDTO = mapper.Map(Of UserDTO)(user)
$vbLabelText   $csharpLabel
  • Cet exemple illustre le mapping entre User et UserDTO où le FullName dans UserDTO est une concaténation de FirstName et LastName de User.

Exemple 2 : Mapping avancé avec des objets complexes

Dans un scénario plus complexe, mappons un objet de commande avec des détails utilisateur imbriqués à un DTO de commande simplifié :

public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
Public Class Order
	Public Property OrderedBy() As User
	' Other properties...
End Class

Public Class OrderDTO
	Public Property FullName() As String
	' Other properties...
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private order As New Order With {
	.OrderedBy = New User With {
		.FirstName = "Jane",
		.LastName = "Doe"
	}
}
Private orderDto As OrderDTO = mapper.Map(Of OrderDTO)(order)
$vbLabelText   $csharpLabel
  • Cet exemple démontre le mapping d'un objet Order, contenant des détails imbriqués OrderedBy, vers un OrderDTO plat, extrayant et combinant les noms d'utilisateur en une seule propriété FullName.

Avec la version 9.0, AutoMapper est passé d'une API statique (Mapper.Initialize) à une API basée sur les instances. Ce changement améliore la flexibilité et est plus adapté aux applications modernes, en particulier celles utilisant l'injection de dépendances. Si vous travaillez avec des versions antérieures à 9.0, l'approche API statique est applicable. Cependant, pour les versions plus récentes, il est recommandé d'adopter l'API basée sur les instances comme indiqué dans les exemples ci-dessus.

Aperçu de Iron Software Suite

La Iron Software Suite pour .NET est un package robuste avec une série de bibliothèques, chacune servant un but spécifique. Il couvre des fonctionnalités telles que la création, la lecture et l'édition de PDFs, la conversion de HTML en PDF, et le traitement d'images en texte dans plusieurs langues. Cette suite répond à divers besoins de développement, en faisant un ajout polyvalent à tout projet C#.

Principaux composants de Iron Software Suite

  1. IronPDF pour la gestion de PDF : Ce composant permet aux développeurs de créer, lire, éditer et signer des PDFs. Il offre également la capacité de convertir HTML en PDF, une fonctionnalité qui peut être particulièrement utile dans la génération de rapports ou de documentation à partir de données basées sur le web.

Automapper C# (Comment ça marche pour les développeurs) : Figure 1 - IronPDF pour .NET : La bibliothèque PDF C#

  1. IronXL Manipulation de fichiers Excel : IronXL facilite le travail avec les fichiers Excel sans avoir besoin d'Office Interop, rationalisant les tâches de manipulation et d'analyse des données.

Automapper C# (Comment ça marche pour les développeurs) : Figure 2 - IronXL pour .NET : La bibliothèque Excel C#

  1. IronOCR pour l'extraction de texte : Il permet l'extraction de texte à partir d'images, prenant en charge un éventail diversifié de 125 langues, le rendant donc très polyvalent pour les projets internationaux.

Automapper C# (Comment ça marche pour les développeurs) : Figure 3 - IronOCR pour .NET : La bibliothèque OCR C#

  1. IronBarcode pour le support QR et Code-barres : Une bibliothèque qui permet la lecture et l'écriture de codes QR et de codes-barres, renforçant les capacités de gestion des stocks, de suivi, et d'autres tâches connexes.

Automapper C# (Comment ça marche pour les développeurs) : Figure 4 - IronBarcode pour .NET : La bibliothèque Barcode C#

Complémentarité avec Automapper

Alors que Automapper excelle dans le mapping de propriétés entre différents modèles d'objets en C#, les bibliothèques d'Iron Software étendent la fonctionnalité en offrant des outils pour gérer divers formats et types de données. Par exemple, après avoir utilisé Automapper pour transformer un objet de domaine utilisateur en un DTO, IronPDF pourrait être utilisé pour générer un rapport complet au format PDF. De même, les données extraites ou transformées à l'aide d'Automapper pourraient être davantage manipulées ou analysées en utilisant IronXL pour les opérations sur les fichiers Excel.

Conclusion

Automapper est un outil inestimable pour les développeurs C#, rationalisant la tâche du mapping entre objets. Ses robustes capacités de mapping de propriétés, de gestion de modèles d'objets complexes, et d'offrir des configurations de mapping personnalisables en font un outil essentiel pour un développement logiciel efficace. Comprendre les subtilités des modèles d'objets et comment Automapper peut être configuré pour répondre à des besoins spécifiques est crucial pour maximiser son potentiel dans tout projet.

The Iron Software's Iron Suite offers various licensing options, including a free trial of Iron Software, to suit different project needs. Ses licences sont réparties en Lite, Plus, et Professionnel, répondant à différentes tailles d'équipes et offrant des fonctionnalités de support complètes. Intégrer cette suite avec Automapper peut grandement améliorer les projets C#, ajoutant des capacités de traitement de données et de manipulation de documents.

Questions Fréquemment Posées

Comment puis-je mapper efficacement les propriétés entre différents types d'objets en C# ?

Vous pouvez utiliser Automapper en C# pour automatiser le mappage des propriétés entre différents types d'objets. En définissant une configuration, vous pouvez spécifier comment les propriétés des objets source se mappent aux objets de destination, réduisant ainsi le codage manuel et minimisant les erreurs.

Quel est le processus pour gérer les objets imbriqués en C# avec Automapper ?

Automapper peut aplatir les modèles d'objets complexes, vous permettant de mapper des propriétés imbriquées vers une structure de destination plate. Cette fonctionnalité est particulièrement utile pour transformer des objets imbriqués en objets de transfert de données simplifiés (DTOs).

Comment puis-je intégrer le mappage d'objets avec la gestion des fichiers PDF et Excel en C# ?

Après avoir utilisé Automapper pour mapper les propriétés des objets, vous pouvez intégrer les bibliothèques d'Iron Software telles qu'IronPDF et IronXL pour générer des rapports ou manipuler des données aux formats PDF et Excel, améliorant ainsi les capacités de traitement de données de vos projets C#.

Quels sont les avantages d'utiliser Automapper avec injection de dépendance dans les applications modernes ?

Dans la version 9.0, Automapper est passé à une API basée sur des instances, ce qui améliore la flexibilité et la compatibilité avec les applications modernes utilisant l'injection de dépendance, permettant des configurations de mappage plus dynamiques et évolutives.

Automapper peut-il gérer le mappage pour différents modèles d'objets comme les DTOs et les objets de domaine ?

Oui, Automapper est conçu pour gérer le mappage entre divers modèles d'objets, y compris les objets de domaine utilisateur et les objets de transfert de données (DTOs), offrant une polyvalence pour différents besoins de transfert de données dans les applications C#.

Quelles sont les étapes pour commencer avec Automapper dans un projet C# ?

Pour commencer à utiliser Automapper dans un projet C#, installez-le via la console du gestionnaire de paquets avec la commande : Install-Package AutoMapper. Ensuite, définissez les configurations de mappage pour automatiser le processus de mappage entre vos modèles d'objets.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite