【发布时间】:2020-11-16 13:19:13
【问题描述】:
我正在尝试使用 AutoMapper 在需要从构造函数而不是属性映射创建目标类型的两种类型之间进行映射。
复杂之处在于,虽然其中一个构造参数是我想从源映射的值,但第二个是我希望 Automapper 使用配置的 DI 容器解析的服务。
我曾尝试使用推荐的.ForCtorParam 方法,但如果我只指定第一个参数,我会收到以下运行时错误:
"目标需要有一个带有 0 个参数或只有可选参数的构造函数
我想我可能需要指定这两个参数,但我看不出如何指示映射器解析服务。
下面详细说明了我正在使用的类结构类型以及映射器的配置方式。
public class Source
{
public string Value {get;set;}
}
public class Destination
{
private IService _someService;
public Destination(string value, IService someService)
{
Value = value;
_someService = someService;
}
public string Value {get;}
}
public static class MapperFactory
{
public static IMapper CreateMapper(IUnitContainer container)
{
var config = new MapperConfiguration(cfg =>
{
cfg.ConstructServicesUsing(type => container.Resolve(type));
cfg.CreateMap<Source,Destination>().ForCtorParam("value", opt => opt.MapFrom(s => s.Value));
});
return config.CreateMapper();
}
}
【问题讨论】:
标签: c# unity-container automapper-10