c# - mvc - automapper nuget
Configure AutoMapper para que se asigne a tipos concretos pero permita Interfaces en la definiciĆ³n de mi clase (1)
Así que pensé algo que parece funcionar.
Si agrego estos dos mapeos:
Mapper.CreateMap<SomethingFromWebService, Something>();
Mapper.CreateMap<SomethingFromWebService, ISomething>().As<Something>();
entonces funciona como yo quiero.
No he podido encontrar ninguna documentación sobre el método ''Como'' (intente buscar en Google para eso! :), pero parece ser una redirección de mapeo.
Por ejemplo: para este mapeo ( ISomething
) ISomething
As
Something
.
Tengo un código que es similar a lo que está abajo. Básicamente, representa obtener datos de un servicio web y convertirlos en objetos del lado del cliente.
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;}
}
El problema que tengo es que quiero usar Interfaces en mis clases (HasSomething.Iomet en este caso), pero necesito tener un mapa de AutoMapper para tipos concretos. (Si no me asigno a tipos concretos, AutoMapper creará proxies para mí. Eso causa otros problemas en mi aplicación).
El código anterior me da este error:
Falta la configuración del mapa de tipo o el mapeo no compatible.
Tipos de mapeo: SomethingFromWebService -> ISomething
UserQuery + SomethingFromWebService -> UserQuery + ISomething
Entonces, mi pregunta es, ¿cómo puedo asignarme a un tipo concreto y seguir utilizando interfaces en mi clase?
NOTA: Intenté agregar este mapeo:
Mapper.CreateMap<SomethingFromWebService, ISomething>();
Pero entonces el objeto devuelto no es del tipo Something
que devuelve un Proxy generado utilizando ISomething como la plantilla.