将服务注入AutoMapper目标类

时间:2011-05-09 14:59:26

标签: dependency-injection structuremap automapper

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

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

我尝试了以下内容:

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

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

我也尝试了以下内容:

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

你也可以这样做:

        Mapper.Configuration.ConstructServicesUsing(container.Resolve);

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