Dependency injection 将服务注入自动映射目标类

Dependency injection 将服务注入自动映射目标类,dependency-injection,structuremap,automapper,Dependency Injection,Structuremap,Automapper,假设我有一个使用AutoMapper映射的源和目标类。 目标将记录器服务注入构造函数 但是,我不知道如何通过StructureMap将服务注入构造函数 我尝试了以下方法: Mapper.Initialize(m => { m.ConstructServicesUsing(ObjectFactory.GetInstance); }); CreateMap<Source, Dest>() .ConstructUsing(x=>

假设我有一个使用AutoMapper映射的源和目标类。 目标将记录器服务注入构造函数

但是,我不知道如何通过StructureMap将服务注入构造函数

我尝试了以下方法:

Mapper.Initialize(m =>
 {                
    m.ConstructServicesUsing(ObjectFactory.GetInstance);
 });
CreateMap<Source, Dest>()
 .ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>());
这并没有阻止我在映射调用中出现异常,我猜是因为服务没有被正确注入

我还尝试了以下方法:

Mapper.Initialize(m =>
 {                
    m.ConstructServicesUsing(ObjectFactory.GetInstance);
 });
CreateMap<Source, Dest>()
 .ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>());
CreateMap()
.ConstructUsing(x=>ObjectFactory.GetInstance());

但是我得到一个错误:无法将Lamda表达式转换为委托类型,但是我看到的所有示例都使用此方法?

传递到ConstructUsing的lambda必须返回目标类型的实例。因此,在您的情况下,您需要这样做:

CreateMap<Source, Dest>()  
.ConstructUsing(x=> ObjectFactory.GetInstance<Dest>());
CreateMap()
.ConstructUsing(x=>ObjectFactory.GetInstance());
假设StructureMap设置正确,它应该为您创建Dest对象并注入iLogger服务。

您也可以这样做:

        Mapper.Configuration.ConstructServicesUsing(container.Resolve);

        Mapper.CreateMap<Source, Dest>().ConstructUsingServiceLocator();
Mapper.Configuration.ConstructServicesUsing(container.Resolve);
Mapper.CreateMap().ConstructUsingServiceLocator();

出于兴趣,这会比选择的答案更快吗,因为对象只是解析而不是经过工厂?