Mehrere AutoMapper.Configure() in der Globalen.asax

Ich bin mit AutoMapper die Zuordnung zwischen DTO-Objekte und mein business objects. Ich habe zwei AutoMapperConfiguration.cs-Dateien - in meinem service-layer und einem anderen in meinem web-api-Schicht.

Wie in der Antwort unter dem folgenden link
Wo AutoMapper.CreateMaps?

Ich bin dem Aufruf der Configure() diese beiden Dateien in mein Global.asax-Klasse

AutoMapperWebConfiguration.Configure();
AutoMapperServiceConfiguration.Configure();

aber wie es scheint, die meinen Dienst Configure-Aufruf (der zweite Aufruf) überschreiben die Zuweisungen des web-api-Schicht (dem ersten Aufruf) und ich erhalte eine Ausnahme, nämlich die Zuordnung fehlt.

Wenn ich Umgekehrt die Konfiguration Aufrufe dann so Aussehen

AutoMapperServiceConfiguration.Configure();
AutoMapperWebConfiguration.Configure();

Habe ich nicht bekommen, die Ausnahme für die web-api-mapping, aber ich bekomme die gleiche Zuordnung Ausnahme für den Service layer.

Mache ich etwas falsch, denn dieser ist deutlich gekennzeichnet als eine Antwort in der obigen stack-overflow-link?

Hier ist mein code:

public static class AutoMapperServiceConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<CmciFlowTestToGenericFlowTestSimpleMappingProfile>();
            x.AddProfile<FsrsFlowTestToGenericFlowTestSimpleMappingProfile>();
        });
    }
}

public class FsrsFlowTestToGenericFlowTestSimpleMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<FsrsFlowTest, GenericFlowTest>()
            .ConvertUsing<FsrsFlowTestToGenericFlowTestSimpleConverter>();
    }
}

public class FsrsFlowTestToGenericFlowTestSimpleConverter : TypeConverter<FsrsFlowTest, GenericFlowTest>
{
    protected override GenericFlowTest ConvertCore(FsrsFlowTest source)
    {
        if (source == null)
        {
            return null;
        }

        return new GenericFlowTest
            {
                FlowTestDate = source.FlowTestDates,
                StaticPsi = source.HydrantStaticPsi.ToString(),
                ResidualPsi = source.HydrantResidualPsi.ToString(),
                TotalFlow = source.NffGallonsPerMinute.ToString(),
                FlowTestLocation = source.FsrsFlowTestLocations.Any()
                          ? source.FsrsFlowTestLocations.First().LocationDescription
                          : null
            };
    }

public class CmciFlowTestToGenericFlowTestSimpleMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<CmciFlowTest, GenericFlowTest>()
            .ConvertUsing<CmciFlowTestToGenericFlowTestSimpleConverter>();
    }
}

public class CmciFlowTestToGenericFlowTestSimpleConverter : TypeConverter<CmciFlowTest, GenericFlowTest>
{
    protected override GenericFlowTest ConvertCore(CmciFlowTest source)
    {
        if (source == null)
        {
            return null;
        }

        return new GenericFlowTest
            {
                FlowTestDate = source.FlowTestDates,
                StaticPsi = source.HydrantStaticPsi.ToString(),
                ResidualPsi = source.HydrantResidualPsi.ToString(),
                TotalFlow = source.CalculatedHydrantGallonsPerMinute.ToString(),
                FlowTestLocation = source.StaticLocationHydrantFlowPSI
            };
    }
}    

public static class AutoMapperWebConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
            {
                x.AddProfile<ServiceToWebApiMappingProfile>();
                x.AddProfile<WebApiToServiceMappingProfile>();
            });
    }
}

public class ServiceToWebApiMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<ServiceFlowTest, FlowTest>();
    }
}

public class WebApiToServiceMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<PropertyAddress, ServicePropertyAddress>();
    }
}

Zu bekommen, um dieses Problem, ich bin das hinzufügen der service-profile in der AutoMapperWebConfiguration Klasse und nur aufrufen AutoMapperWebConfiguration.Configure() in der globalen.asax.

Können Sie nach dem code in den Methoden Konfigurieren, die zugeordneten Typen und auch die Zuordnungen, die fehlerhaft sind?
Sind Sie nur aufrufen CreateMap im Konfigurieren von Methoden?
Sind Sie zufällig aufrufen Mapper.Reset();?
Nein, ich fordere nicht-Mapper.Reset().
Ich bin mit Profile. Ich rufe CreateMap in meinem profile. In der Configure(), ich bin nur das hinzufügen von Profilen in Mapper.Initialize()

InformationsquelleAutor manu79 | 2013-12-06

Schreibe einen Kommentar