net mvc injection formember example dependency custom c# .net automapper

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.