Mam trochę kodu podobnego do tego, co poniżej. Zasadniczo reprezentuje pobieranie danych z usługi WWW i przekształcanie ich w obiekty po stronie klienta.Skonfiguruj program AutoMapper, aby odwzorować konkretne typy, ale zezwól na interfejsy w definicji mojej klasy
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;}
}
Mam problem jest, że chcę używać interfejsów w moich zajęciach (HasSomething.ISomething w tym przypadku), ale muszę mieć mapę AutoMapper do konkretnych typów. (Jeśli nie mapować do konkretnych typów następnie AutoMapper stworzy proxy dla mnie to powoduje inne problemy w moim app.).
Powyższy kod daje mi ten błąd:
Missing type map configuration or unsupported mapping.
Mapping types: SomethingFromWebService -> ISomething
UserQuery+SomethingFromWebService -> UserQuery+ISomething
Więc moje pytanie jak mogę odwzorować konkretny typ i nadal korzystać z interfejsów w mojej klasie?
UWAGA: Próbowałem dodanie tego mapowania:
Mapper.CreateMap<SomethingFromWebService, ISomething>();
Ale wtedy obiekt nie jest zwrócony typu Something
zwraca wygenerowany Proxy używając ISomething jako szablonu.
Dziękuję za to, bardzo mi to pomogło. O ile się nie mylę, potrzebujesz tylko drugiego mapowania. Sądzę, że drugie mapowanie musi uczynić pierwszego zbędnego? –
Nie, nadal potrzebujesz pierwszego odwzorowania dla konkretnego typu, w przeciwnym razie AutoMapper nie wiedziałby, jak odwzorować coś z SomethingFromWebService na coś – TheWho
Wielkie dzięki za to! Mam problemy przez 2 godziny i to rozwiązuje mój problem! – Speuline