Wie zu verwenden mapper.Karte in MapperConfiguration der AutoMapper?

Ich brauche die Karte ein Objekt auf ein anderes mit AutoMapper. Die knifflige Frage ist, wie kann ich den Zugriff auf eine Instanz des Mappers (Instanz von IMapper) innerhalb der mapping-Konfiguration oder in einer benutzerdefinierten Art Konverter?

Den code unten funktioniert nicht, aber es ist ein Beispiel, was ich erreichen möchte - bitte beachten Sie die mapper.Map anrufen und davon ausgehen, dass die Zuordnungen Customer => CustomerDto und Customer => DetailedCustomerDto definiert sind.

var config = new MapperConfiguration(
    cfg => cfg.CreateMap<Order, OrderDto>()
        .ForMember(dst => dst.Customer, src => src.ResolveUsing(o => {
            return o.Type == 1
                ? mapper.Map<Customer, CustomerDto>(o.Customer)
                : mapper.Map<Customer, DetailedCustomerDto>(o.Customer)
            })
    );

Den client-Teil ist:

var mapper = config.CreateMapper();
var orderDto = mapper.Map<Order, OrderDto>(order);

Vereinfachte version von Objekten, die ich abbilden will, ist:

public class Order
{
    public int Type { get; set; }
    public Customer Customer { get; set; }
}

public class Customer
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class OrderDto
{
    public CustomerDto Customer { get; set; }
}

public class CustomerDto
{
    public long Id { get; set; }
}

public class DetailedCustomerDto : CustomerDto
{
    public string Name { get; set; }
}

Wie Sie sehen, von den codes oben, basierend auf dem Wert von Order.Type, der mapper sollte die Karte das Eigentum Order.Customer an verschiedenen Zielen. Als ein Ziel (DetailedCustomerDto) erbt von der anderen (CustomerDto) wird es ein wenig knifflig.

Bitte beachten Sie, dass die Nutzung der überflüssig und veraltet statische Methode Mapper.Karte ist KEINE option.

InformationsquelleAutor Anton | 2016-05-06
Schreibe einen Kommentar