3 Stimmen

Wie kann man eine virtuelle Eigenschaft zuordnen, ohne sie explizit für jede abgeleitete Klasse zuzuordnen, die die Eigenschaft mit AutoMapper außer Kraft setzt?

Ich mappe meine Entitäten auf DTOs, mit AutoMapper. Einige meiner Entitäten haben virtuelle Eigenschaften, die von abgeleiteten Entitäten außer Kraft gesetzt werden können. Ich mappe die virtuellen Eigenschaften mit den Basisklassen, in denen sie definiert sind. Wenn ich jedoch die abgeleiteten Klassen zuordne, ordnet AutoMapper die Basisimplementierung der virtuellen Eigenschaften anstelle der überschriebenen Eigenschaften zu.

Ich beginne mit den Klassendefinitionen:

public class BaseType
{
    public virtual string Title
    {
        get { return string.Empty; }
    }    
}

public class DerivedType : BaseType
{
    public override string Title
    {
        get { return Name; }
    }    

    public string Name { get; set; }
}

public class BaseTypeDto
{
    public string Title { get; set; }    
}

public class DerivedTypeDto : BaseTypeDto
{
    public string Name { get; set; }    
}

Nun zur Konfiguration des Mappings:

CreateMap<BaseType, BaseTypeDto>()
    .ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-"))
    .Include<DerivedType, DerivedTypeDto>();

CreateMap<DerivedType, DerivedTypeDto>()

Und schließlich die Kartierung:

DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance);

Wenn ich die Titelzuordnung auf den CreateMap-Aufruf setze, der den abgeleiteten Typ konfiguriert, funktioniert es. Aber da ich etwa 20 abgeleitete Typen habe, möchte ich wirklich, dass die Title-Zuordnung in der Basisklasse konfiguriert wird und nicht für jede abgeleitete Klasse wiederholt werden muss.

Ist dies mit AutoMapper möglich?

1voto

Omnia9 Punkte 1543

Könnten Sie nicht die ConstructUsing() Option? Dies würde Ihnen erlauben, einen Delegaten zu haben, um das Objekt der Basisklasse die ganze Zeit abzubilden?

CreateMap<basetype, baseTypeDto>()
    .ConstructUsing(y => base.title = basetype.title);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X