Ich hatte in meinem Projekt eine globale Automapper-Konfiguration definiert, die es mir erlauben würde, in meinem Code zu verwenden. (Siehe meine Konfiguration unten.)Automapper sagt Mapper.Map ist veraltet, globale Zuordnungen?
Ich habe das NuGet-Paket aktualisiert und sehe die Meldung, dass Mapper.Map veraltet ist. Ich ging auf GitHub AutoMapper zurück und sehen Sie Beispiele wie folgt aus:
[Test]
public void Example()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Source1, SubDest1>().FixRootDest();
cfg.CreateMap<Source2, SubDest2>().FixRootDest();
});
config.AssertConfigurationIsValid();
var mapper = config.CreateMapper();
var subDest1 = mapper.Map<Source1, SubDest1>(new Source1 {SomeValue = "Value1"});
var subDest2 = mapper.Map<Source2, SubDest2>(new Source2 {SomeOtherValue = "Value2"});
subDest1.SomeValue.ShouldEqual("Value1");
subDest2.SomeOtherValue.ShouldEqual("Value2");
}
Werde ich habe eine Konfiguration in jeder Methode zu erstellen, die eine Zuordnung verwendet?
Meine aktuelle globale Konfiguration:
namespace PublicationSystem.App_Start
{
public class AutoMapperConfig
{
public static void CreateMaps()
{
CreateProjectMaps();
}
private static void CreateProjectMaps()
{
Mapper.CreateMap<Project, ProjectCreate>();
Mapper.CreateMap<Project, ProjectSelectable>();
//...
}
}
}
UPDATE: Dank einiger Coaching von Scott Chamberlain ich eine Klasse wie folgt geschaffen:
public class MkpMapperProfile : AutoMapper.Profile
{
protected override void Configure()
{
this.CreateMap<Project, ProjectCreate>();
this.CreateMap<Project, ProjectSelectable>();
this.CreateMap<Project, ProjectDetails>();
// Many Many other maps
}
}
Ich denke, ich sollte habe die 'MapperConfiguration' in meiner BaseController-Klasse. Ich fing an, so etwas zu tun:
public partial class BaseController : Controller
{
private MapperConfiguration mapConfig;
public BaseController()
{
db = new MkpContext();
SetMapperConfig();
}
private void SetMapperConfig()
{
mapConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile<MkpMapperProfile>();
});
}
public BaseController(MapperConfiguration config)
{
db = new MkpContext();
this.mapConfig = config;
}
}
Bin ich auf dem richtigen Weg?
Automapper entfernt sich von globalen statischen Funktionen. Dies ermöglicht Bibliotheken, die von verschiedenen Autoren geschrieben wurden, AutoMapper zu verwenden, ohne sich gegenseitig zu stören. –
Ich bin mir nicht sicher, was das für mich bedeutet. Ich bekomme hier und da Informationen, aber es ergibt kein vollständiges Bild für mich. Ich habe gelesen: https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-API, aber es macht keinen Sinn. Muss ich in JEDEM ActionResult, das AutoMapper verwendet, eine Konfiguration definieren? Ich könnte es in einen Datenlayer verschieben ... Und meine App scheint nicht "MvcApplication.MapperConfiguration" zu haben. Wo ist das definiert? –
Sie erstellen eine Klasse, die von 'Profile' abgeleitet ist, überschreiben die' Configure() 'Funktion, fügen dann Ihre' CreateProjectMaps' ein und ersetzen 'Mapper.' mit' this.' –