2016-05-05 12 views
0

Ich versuche Automapper, mit einer wirklich einfachen Zuordnung, aber es funktioniert nicht. Ich versuche, einen System.Security.Claims.Claim Typ in einen anderen Typ ClaimItem zur Karte:Automapper -AutoMapper.AutoMapperMappingException

public class ClaimItem 
{ 
    public string Type { get; set; } 
    public string Value { get; set; } 
} 

Aber ich immer bekommen:

AutoMapper.AutoMapperMappingException: Fehlende Kartentyp Konfiguration oder nicht unterstützte Mapping.

Mapping-Typen: Claim -> ClaimItem System.Security.Claims.Claim -> CommonAuth.ClaimItem

Zielpfad: ClaimItem

Quelle Wert: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth: 05.05.2016

Hier ist meine Konfiguration:

var config = new MapperConfiguration(cfg => 
{ 
    cfg.CreateMap<Claim, ClaimItem>(MemberList.Destination); 
}); 

config.AssertConfigurationIsValid(); 

var cls = getClaims(); 
List<ClaimItem> list = new List<ClaimItem>(); 
cls.ForEach(cl => list.Add(Mapper.Map<ClaimItem>(cl))); 
+1

Es muss Text Erklärung dafür sein, was falsch ist. Können Sie den gesamten Text bereitstellen –

+0

Aktualisiert! :-) In meinem Zieltyp habe ich nur zwei Requisiten, Type und Value. Ich möchte, dass diese beiden Eigenschaften aus den SourceType Claims zugeordnet werden. Sie haben die gleichen Namen in Quelle und Ziel. – Legends

+0

Wo bekommen Sie Mapper? weil es in Version 4 –

Antwort

2

Von the documentation müssen Sie Mapper von Config erstellen. So sollten Sie in Ihrem Code smth haben wie diese

private static Mapper _mapper; 
    public static Mapper Mapper 
    { 
     get 
     { 
      if (_mapper == null) 
      { 
       var config = new MapperConfiguration(cfg => 
       { 
        cfg.CreateMap<Claim, ClaimItem>(MemberList.Destination); 
       }); 

       config.AssertConfigurationIsValid(); 
       _mapper = config.CreateMapper(); 
      } 
      return _mapper; 
     } 
    } 

Das bedeutet, dass, wenn Sie Mapper es hould statische haben von Config erstellt werden, die Sie erstellen

+0

Jetzt funktioniert es, also muss ich ein Singleton erstellen, um auf "Mapper" zuzugreifen, richtig? – Legends

+0

ok, du hast die Antwort aktualisiert, danke – Legends

+0

@Legends ich habe meine Antwort aktualisiert. Es kommt darauf an. Sie könnten Singleton verwenden oder Sie könnten eine Factory-Klasse haben, die Mapper erstellt. –