2 votes

Classes AutoMapper avec un mode de vie transitoire dans IoC

J'utilise AutoMapper pour faire correspondre des entités de domaine à des modèles de vue dans une application Asp.Net MVC. J'enregistre ces classes de mappage dans Castle Windsor afin qu'elles soient disponibles pour le contrôleur par l'intermédiaire de l'injection de dépendances ctor. Ces classes de mappage ont une méthode virtuelle CreateMap où je peux surcharger le mappage d'AutoMapper, en lui indiquant comment mapper les champs de l'entité vers le modèle de vue, quels champs ignorer, en pointant vers les méthodes qui transforment les données, etc. Tout cela fonctionne bien ; un grand bravo aux personnes à l'origine d'AutoMapper !

Jusqu'à présent, j'ai enregistré les classes de cartographie avec un style de vie singleton dans Windsor, mais l'une d'entre elles doit utiliser IAuthorizationRepository de Rhino.Security, dont les composants doivent être enregistrés comme transitoires. Cela m'oblige à enregistrer les classes de mappage également comme transitoires, car une classe de mappage singleton contenant une référence à un IAuthorizationRepository transitoire pose des problèmes la deuxième fois que le mappeur est utilisé (c'est-à-dire que les erreurs ISession sont déjà fermées).

Est-ce un gaspillage de ressources que d'enregistrer toutes ces classes de mappage avec un mode de vie transitoire, qui fera que la classe de mappage sera instanciée et que la méthode CreateMap sera exécutée chaque fois que le système voudra mapper une entité de domaine à un modèle de vue ?

Ou dois-je essayer de trouver un moyen de séparer IAuthorizationRepository de la classe de mappage afin de garder les classes de mappage en tant que Singletons ?

Merci Dan

2voto

Mauricio Scheffer Points 70470

Une autre façon de contourner ce problème est d'utiliser la TypedFactoryFacility, alors au lieu d'injecter IAuthorizationRepository dans vos singletons vous pouvez injecter Func<IAuthorizationRepository>

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