c# - 升级到 9 后无法访问自动映射器上下文项

标签 c# automapper

我有一个这样的映射器:

CreateMap<Source, ICollection<Dest>>()
    .ConvertUsing((src, dst, context) => 
    {
        return context.Mapper.Map<ICollection<Dest>>
            (new SourceItem[] { src.Item1, src.Item2 ... }.Where(item => SomeFilter(item)),
            opts => opts.Items["SomethingFromSource"] = src.Something);
    });

CreateMap<SourceItem, Dest>()
    .ForMember(d => d.Something, opts => opts.MapFrom((src, dst, dstItem, context)
        => (string)context.Items["SomethingFromSource"]));

这给了我一个异常(exception) You must use a Map overload that takes Action<IMappingOperationOptions> .好吧,我确实使用了 Map执行此操作的过载。我还能怎么做?

最佳答案

这是因为这个变化:
https://github.com/AutoMapper/AutoMapper/pull/3150
您可以通过访问 ResolutionContext 的 Options 属性来获取项目。
更改 context.Items["SomethingFromSource"]context.Options.Items["SomethingFromSource"] .
当没有 Items 时,ResolutionContextDefaultContext 相同.因此ResolutionContext.Items属性将抛出异常。
但是,如果有,ResolutionContext.ItemsDefaultContext 不一样.因此ResolutionContext.Items将返回列表。
虽然 ResolutionContext.Options.Items将始终返回列表,它不会抛出任何异常,无论它是否为空。我相信这就是错误消息的意思,因为 ResolutionContext.OptionsIMappingOperationOptions

关于c# - 升级到 9 后无法访问自动映射器上下文项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398824/

相关文章:

c# - 取消映射源属性时强制抛出异常

c# - 如何使用 c# 获取服务器端元素的 innerhtml(内部有另一个服务器端控件)

c# - 保存具有多个父项的 EF 实例

c# - 我的简单循环缓冲区无法正常工作

c# - 在 C# 中你可以继承多少个类?

namespaces - AutoMapper 中 .ForSourceMember 方法的命名空间

.net - 如何使用 AutoMapper 映射集合中的第一项

c# - 使用带有日期时间和 bool 值的自动映射器来表示 POCO 中的半天

c# - 不能为负数并避免在文本框中输入字母

c# - 什么时候 a == b 可以为假而 a.Equals(b) 为真?