假设我有一个使用AutoMapper映射的源和目标类。 目标有一个注入构造函数的记录器服务。
但是,我不知道如何通过StructureMap将服务注入构造函数?
我尝试了以下内容:
Mapper.Initialize(m =>
{
m.ConstructServicesUsing(ObjectFactory.GetInstance);
});
这并没有阻止我在映射调用上遇到异常,我猜是因为服务没有正确注入。
我也尝试了以下内容:
CreateMap<Source, Dest>()
.ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>());
但我收到错误:无法将Lamda表达式转换为委托类型,但我见过的所有示例都使用此方法?
答案 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();