AutoMapper-add-Profil auf der assembly laden
Ich möchte mich registrieren alle Zuordnungen in meinem Business-Schicht zu Data Layer, und Data Layer zu Business-Schicht Klassen, so wie meine Business-Schicht-assembly geladen. Derzeit bin ich mit einer statischen Klasse, um diese Aufgabe für mich:
public static class AutoMapperBootstrapper
{
public static void InitMappings()
{
Mapper.Initialize(a => a.AddProfile<MyProfile>());
}
}
Aber jedes mal, wenn ich einen Anruf mit-Mapper.Die Karte und die zusätzlichen mappings im Profil, es ist noch zu sagen Fehlende Typ-Mapping-Informationen.
, Wie ich gehen sollte, über dies zu beheben?
Eine chance können Sie bieten ein Beispiel für die mapping-Konfiguration und map-Aufruf der Fehler aufgetreten ist?
Ich bin nicht mit einem expliziten Aufruf von Configure Methode. Nur dieser Aufruf in der Business-Klasse: AutoMapper.Mapper.Map<IEnumerable<DL.MasterList> IEnumerable<BL.MasterList>>(sourceData).ToList<MasterList>();
Könnten Sie uns die CreateMap Anrufe in Ihrem Profil Klasse? Helfen könnte vorschlagen, wo das problem ist. Ich nehme an, Sie haben festgestellt, dass Ihr bootstrapper aufgerufen wird?
Ich bin nicht mit einem expliziten Aufruf von Configure Methode. Nur dieser Aufruf in der Business-Klasse: AutoMapper.Mapper.Map<IEnumerable<DL.MasterList> IEnumerable<BL.MasterList>>(sourceData).ToList<MasterList>();
Könnten Sie uns die CreateMap Anrufe in Ihrem Profil Klasse? Helfen könnte vorschlagen, wo das problem ist. Ich nehme an, Sie haben festgestellt, dass Ihr bootstrapper aufgerufen wird?
InformationsquelleAutor Nisha_Roy | 2012-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint Ihr
Mapper.AddProfile
ist nicht gefordert, wenn die Anwendung gestartet wird.Versuchen Sie dieses,
In
Global.asax.cs
[Application_Start
],Sowie
MyProfile
sieht wie folgt aus,Sie können profile hinzufügen von anderen Projekten in der App_Start-Methode. Zum Beispiel:
AutoMapper.Mapper.Initialize(a => { a.AddProfile<Business.Layer.MyProfile>(); a.AddProfile<Another.Layer.AnotherProfile>(); });
blog post kann einige Hinweise geben.
Vielen Dank, dass hat funktioniert.
Link im Kommentar von Mightymuke ist eine ausgezeichnete Lesen und mir geholfen. Danke.
InformationsquelleAutor Prasad Kanaparthi
Ich weiß nicht, ob Sie bekommen haben eine Antwort auf diese noch. Sie sind auf dem richtigen Weg, aber nicht verwenden
Mapper.Initialize
. Wenn Sie initialisiert werden, Sie sind clearing alle bestehenden Zuordnungen und dann das hinzufügen diejenigen, die in dem Aufruf von initialize. Stattdessen rufen Sie einfachAddProfile
in Ihrer statischen Methode. Oder noch besser, fügen Sie einfach das Profil in deinem Konstruktor der BL oder DL-Klasse.So, in aller Kürze, was passiert ist, das Sie hinzufügen, was auch immer die Zuweisungen, die Sie brauchen für Ihre web-tier in der
Global.asax
oder wo auch immer Sie sind das hinzufügen. Dann das erste mal Ihre BL oder DL geladen wird, die Sie anrufen initialisieren, das löscht alle vorhandenen Zuordnungen. Also das nächste mal, wenn Sie gehen, verwenden Sie eine Zuordnung, die bereits Hinzugefügt wurden, erhalten Sie die Meldung, dass es nicht existiert, weil Sie gelöscht wurde durch den Aufruf von initialize.InformationsquelleAutor Todd Miranda