2011-05-09 13 views
7

Supongamos que tengo una clase de origen y de destino asignada mediante AutoMapper. El destino tiene un servicio de registrador inyectado en el constructor.Inyectar servicio en una clase de destino de AutoMapper

Sin embargo, no sé cómo obtener el servicio inyectado en el constructor a través de StructureMap?

He intentado lo siguiente:

Mapper.Initialize(m => 
{     
    m.ConstructServicesUsing(ObjectFactory.GetInstance); 
}); 

lo que no impidió que yo tenga la excepción de la llamada mapeo, supongo que porque el servicio no está siendo inyectado en forma adecuada.

También probé el siguiente:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>()); 

Pero me sale el error: No se puede convertir expresión Lamda delegar tipo, sin embargo, todos los ejemplos que he visto el uso de este método?

Respuesta

5

La lambda que pasa a ConstructUsing debe devolver una instancia del tipo de destino. Así, en su caso, que se quiere hacer esto:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<Dest>()); 

Asumiendo que tiene la configuración StructureMap correctamente, debe crear el objeto Dest e inyectar el ILoggerService para usted.

+0

Excelente! Gracias. – jaffa

4

También puede hacer esto:

 Mapper.Configuration.ConstructServicesUsing(container.Resolve); 

     Mapper.CreateMap<Source, Dest>().ConstructUsingServiceLocator(); 
+0

Fuera de interés, ¿sería esto más rápido que la respuesta seleccionada dado que el objeto se acaba de resolver en lugar de pasar por la fábrica? – Worthy7

Cuestiones relacionadas