初始化后将配置文件添加到自动映射器

时间:2018-07-11 11:09:18

标签: c# dependency-injection automapper

在一些外部程序集已经在DI设置上添加了映射器配置之后,添加配置文件时遇到了麻烦。

首先我只是添加了一些代码来添加配置文件

       var mapperConfiguration = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile<DataMappingProfile>();
        });
        mapperConfiguration.AssertConfigurationIsValid();
        services.AddSingleton<IMapper>(new Mapper(mapperConfiguration));

但是后来我改写了其他一些映射配置文件。

所以我在想,我应该尝试将我的添加到现有的映射配置中。

所以我就这样走

        var sp = services.BuildServiceProvider();
        var autoMapper = sp.GetService<IMapper>();
        var mapperConfiguration = autoMapper?.ConfigurationProvider as MapperConfiguration;

        var configuration = new MapperConfigurationExpression();
        configuration.AddProfile<LpisMappingProfile>();


        if (mapperConfiguration == null)
        {
            mapperConfiguration = new MapperConfiguration(configuration);
        }
        else
        {
            //add the previous as well
            //?? add this `configuration` ?
        }

        mapperConfiguration.AssertConfigurationIsValid();
        services.AddSingleton<IMapper>(new Mapper(mapperConfiguration));

但是我有点陷入else流程中。 有什么建议吗?

thnx!

1 个答案:

答案 0 :(得分:0)

那是不可能的。如果程序集使用私有的MapperConfiguration,那是它自己的事。如果要与应用程序协作,则不应定义MapperConfiguration,而应定义要由应用程序扫描并添加到应用程序拥有的单例MapperConfiguration的配置文件。 AM配置为只读,在初始化阶段之后无法更改。