Registrierung von AutoMapper 4.2.0 mit Simple Injector

8

Aktualisiert auf AutoMapper 4.2.0 und dem hier verfügbaren Migrationsleitfaden folgend: Ссылка . Versuchen, Code auf dieser Seite für StructureMap zu Simple Injector zu übersetzen. Kann mir jemand zeigen, wie dieser Code in Simple Injector aussieht?

Strukturkarte

%Vor%

Einfacher Injektor

%Vor%     
James 12.02.2016, 19:29
quelle

3 Antworten

10

Dies wäre das Äquivalent:

%Vor%     
Steven 12.02.2016, 20:49
quelle
2

Die IPackage-Schnittstelle von Simple Injector scheint dem entsprechenden Registry-Typ von StructureMap am nächsten zu sein. Hier ist das Paket, das ich benutze, aus @ Stevens Antwort :

%Vor%

Sie müssten das Paket SimpleInjector.Packaging hinzufügen und dann einen Aufruf zu container.RegisterPackages(); hinzufügen. in Ihrem Bootstrap / Konfigurationscode.

Das einzige, was sich wirklich von StructureMap ändert, sind die letzten beiden Zeilen.

    
Tieson T. 21.03.2016 22:50
quelle
0

Zum Zuordnen mehrerer IMapper mit verschiedenen MapperConfiguration-Objekten, was ein etwas wiederkehrendes Problem zu sein scheint, empfehle ich den folgenden Ansatz, der nicht einmal das Refactoring der Aufrufe der Mapper-Methode erfordert:

1) Erstellen Sie einen generischen Wrapper um die IMapper-Schnittstelle herum. Dieser Wrapper kann entweder eine Schnittstelle oder eine Klasse sein, aber offensichtlich müssen Sie Ihren Wrapper implementieren, daher werde ich die konkrete Klasse unten zeigen. Lassen Sie dieses Wrapper-Werkzeug (oder erben Sie, wenn Sie eine Schnittstelle erstellen) die IMapper-Schnittstelle wie folgt:

%Vor%

Das generische Argument muss eine Unterklasse von "Profile" sein, weil Sie von diesem Profil aus Ihre Mapper-Konfiguration erhalten.

2 Implementieren Sie in dieser Klasse die IMapper-Schnittstelle, indem Sie einfach die Aufrufe an die private IMapper-Instanz umleiten, die Sie im Konstruktor erstellen:

%Vor%

3) Jetzt müssen Sie in Simple Injector eine teilweise geschlossene Instanz dieser ProfileMapper-Klasse für jedes Profil, das Sie haben, registrieren. Sie tun dies zuerst, indem Sie alle Klassen erhalten, die von Profil erben, dann diese teilweise geschlossene Instanz erstellen und dann registrieren. Es gibt mehrere Möglichkeiten, alle Profilklassen zu bekommen, aber ich ging damit:

%Vor%

Dieser Code ruft zuerst alle Typen ab, die von Profile im angegebenen Namespace erben. Dann registriere ich es für jedes Profil mit SimpleInjector (nicht wirklich notwendig, da es sich um konkrete Typen handelt und als solche vom Container im laufenden Betrieb erstellt werden kann), dann mache ich eine teilweise geschlossene Instanz meiner ProfileWrapper-Klasse mit dem aktuellen Profil als generisches Argument, und schließlich registriere ich meine geschlossene Instanz als Singleton. Auf diese Weise können Sie neue Profile erstellen, ohne neue Wrapper manuell registrieren zu müssen.

Und das ist es. Anstatt nun den IMapper zu verwenden und ihn zu injizieren, injizierst du deinen ProfileWrapper mit dem Profil, das du verwenden möchtest, wie folgt:

%Vor%

und so weiter. Jeder Wrapper wurde mit einer separaten MapperConfiguration mit verschiedenen Profilen erstellt. Da der Wrapper den IMapper implementiert, bleibt der gesamte Mapping-Code gleich. Keine Notwendigkeit, die Methodenaufrufe zu refaktorieren, nur die Abhängigkeitstypen.

Wenn Sie ein BaseProfile erstellen, ändern Sie einfach den generischen Parameter in ProfileMapper, um nur Instanzen für dieses BaseProfile zu akzeptieren.

    
Daniel Pérez Armería 07.07.2016 17:47
quelle

Tags und Links