automapper - Autofac - ForAllOtherMembers - 未使用映射器
问题描述
我已经按照此处的建议实现了 CaseInsensitiveFromStringDictionaryMapper https://github.com/AutoMapper/AutoMapper/issues/3243 我还使用以下代码将此映射器注册到 autofac
protected void ConfigureAutomapper(ContainerBuilder builder)
{
var config = new MapperConfiguration(cfg =>
{
foreach (var assembly in GetAssemblies(CustomAssembliesPrefix))
{
cfg.AddMaps(assembly);
}
cfg.Mappers.Insert(0, new CaseInsensitiveFromStringDictionaryMapper());
});
try
{
config.AssertConfigurationIsValid();
}
catch (AutoMapperConfigurationException ex)
{
var message = new StringBuilder();
message.AppendLine("Automapper configuration error");
Exception exception = ex;
while (exception != null)
{
message.AppendLine($"Message: {ex.Message}");
message.AppendLine($"Stack trace: ");
message.AppendLine($"{ex.StackTrace}");
message.AppendLine($"");
exception = exception.InnerException;
}
EventLogProvider.LogEvent(EventType.ERROR, nameof(WebContainer), "Automapper configuration error", message.ToString());
throw;
}
builder.Register(c => new Mapper(config))
.As<IMapper>()
.SingleInstance();
}
如果我这样做,我就能够执行以下代码,它完美地映射了我的目标对象的所有属性:
mapper.Map<ReferenceSearchResultDocument>(documentSearchResult.Document)
但是我需要一些成员的特定内容,所以我为这些成员创建了一个配置文件和一个映射,但我希望我的其他成员具有默认行为(因此在我的字典中不区分大小写)。我已经测试了以下代码:
.ForAllOtherMembers(opt => opt.MapFrom(src => src[opt.DestinationMember.Name]))
但当然这与让映射器完成他们的工作不同。
我该如何解决?
问候,
本杰明
解决方案
推荐阅读
- c++ - 如何处理 cgo 中打包结构中的 char *?
- javascript - 使用 javascript 创建 `select` 元素
- angular - 角度 2+,垫表 - 过滤不适用于模型中的模型
- reactjs - 开玩笑 toMatchInlineSnapshot 一直显示“不允许操作,scandir 消息”
- javascript - AgGrid 自定义标题过滤器未显示
- c++ - 为什么我的 elseif 语句永远不会执行
- java - 为什么读取文件名中带有“:”的测试资源会导致 NPE?
- javascript - 拒绝加载脚本“https://apis.google.com/js/api.js”,因为它违反了以下内容安全策略指令
- reactjs - 更新道具不会调用 componentWillReceiveProps 方法
- c# - 在对 Post 方法的第二次调用中获得“异步模块或处理程序已完成,而异步操作仍处于挂起状态”