Automapper sagt, Mapper.Map ist veraltet, globale Zuordnungen?

Ich hatte in meinem Projekt eine globale Automapper-Konfiguration definiert, mit der ich @ verwenden kanMapper.Map<targetType>(sourceObject); in meinem Code. (Siehe meine Konfiguration unten.)

Ich habe das NuGet-Paket aktualisiert und sehe die Meldung, dass Mapper.Map veraltet / veraltet ist. Ich bin auf GitHub zu Automapper zurückgekehrt und habe Beispiele wie dieses gesehen:

[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");
}

uss ich in JEDER Methode eine Konfiguration erstellen, die ein Mapping verwende

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>();
            //...
        }
    }
}

AKTUALISIEREN Dank einigem Coaching von Scott Chamberlain habe ich eine Klasse wie diese 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 die 'MapperConfiguration' in meiner BaseController-Klasse haben. Ich habe angefangen, so etwas zu machen:

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?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage