首页 > 解决方案 > 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])) 但当然这与让映射器完成他们的工作不同。

我该如何解决?

问候,

本杰明

标签: automapper

解决方案


推荐阅读