Ich habe etwas Code, der dem Folgenden ähnlich ist. Im Grunde bedeutet es, Daten von einem Web-Service zu erhalten und in client-seitige Objekte umzuwandeln.Konfigurieren AutoMapper auf konkrete Typen zuordnen, aber Schnittstellen in der Definition meiner Klasse
void Main()
{
Mapper.CreateMap<SomethingFromWebService, Something>();
Mapper.CreateMap<HasSomethingFromWebService, HasSomething>();
// Service side
var hasSomethingFromWeb = new HasSomethingFromWebService();
hasSomethingFromWeb.Something = new SomethingFromWebService
{ Name = "Whilly B. Goode" };
// Client Side
HasSomething hasSomething=Mapper.Map<HasSomething>(hasSomethingFromWeb);
}
// Client side objects
public interface ISomething
{
string Name {get; set;}
}
public class Something : ISomething
{
public string Name {get; set;}
}
public class HasSomething
{
public ISomething Something {get; set;}
}
// Server side objects
public class SomethingFromWebService
{
public string Name {get; set;}
}
public class HasSomethingFromWebService
{
public SomethingFromWebService Something {get; set;}
}
Das Problem, das ich habe ist, dass ich Interfaces in meinen Klassen (HasSomething.ISomething in diesem Fall) verwenden möchten, aber ich brauche AutoMapper Karte zu konkreten Typen haben. (Wenn ich den Plan nicht Typen auf Beton dann AutoMapper Proxies für mich erstellen, die anderen Probleme in meiner Anwendung verursacht..)
Der obige Code gibt mir diese Fehlermeldung:
Missing type map configuration or unsupported mapping.
Mapping types: SomethingFromWebService -> ISomething
UserQuery+SomethingFromWebService -> UserQuery+ISomething
Also meine Frage ist, wie kann ich auf einen konkreten Typ abbilden und trotzdem Schnittstellen in meiner Klasse verwenden?
HINWEIS: Ich habe versucht, das Hinzufügen dieser Abbildung:
Mapper.CreateMap<SomethingFromWebService, ISomething>();
Aber dann das Objekt zurückgegeben wird, ist nicht vom Typ Something
es gibt einen generierte Proxy ISomething als Vorlage verwendet wird.
Dank dafür hat mir das sehr geholfen. Wenn ich mich nicht täusche, brauchen Sie nur das zweite Mapping. Ich denke, das zweite Mapping muss das erste überflüssig machen? –
Nein, Sie benötigen immer noch das erste Mapping für den konkreten Typ, sonst würde AutoMapper nicht wissen, wie man von SomethingFromWebService zu etwas mappt. – TheWho
Vielen Dank dafür! Ich kämpfe jetzt seit 2 Stunden, und es behebt mein Problem! – Speuline