【问题标题】:Inject service into an AutoMapper destination class将服务注入 AutoMapper 目标类
【发布时间】:2011-05-09 14:59:25
【问题描述】:

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

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

我尝试了以下方法:

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

这并没有阻止我在映射调用中遇到异常,我猜是因为服务没有被正确注入。

我还尝试了以下方法:

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

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

【问题讨论】:

    标签: dependency-injection structuremap automapper


    【解决方案1】:

    传递给 ConstructUsing 的 lambda 必须返回目标类型的实例。所以在你的情况下,你会想要这样做:

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

    假设您正确设置了 StructureMap,它应该为您创建 Dest 对象并注入 ILoggerService。

    【讨论】:

      【解决方案2】:

      您也可以这样做:

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

      【讨论】:

      • 出于兴趣,这会比选择的答案更快,因为对象只是被解析而不是通过工厂?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 2020-09-09
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多