.net 核心中应用程序启动期间的 Automapper 映射验证?

Automapper mapping validation during application startup in .net core?

当我使用 Automapper v6(我使用的是 .net 核心)时,我有这个命令来验证配置:

   configuration.AssertConfigurationIsValid();

但是现在,在移动到最新版本之后,我没有这个,因为我的配置完全是 (docs):

   private void ConfigureServices(IServiceCollection services)
        {
            services.AddAutoMapper(typeof(AppSettingsMappingProfile));    //marker type    
        }

但是,我仍然想在启动时验证所有映射。

文档说我需要这样做 :

var configuration = new MapperConfiguration(cfg =>
  cfg.CreateMap<Source, Destination>());

configuration.AssertConfigurationIsValid();

但我没有它,因为我正在通过此命令使用配置文件:

 services.AddAutoMapper(typeof(AppSettingsMappingProfile)); 

问题:

如何让 AutoMapper 在启动时扫描验证?

如果您查看 AddAutoMapper 的源代码,您会发现它将 IConfigurationProvider 注册为单例。这意味着您可以安全地将它放在您的 Configure 方法中并在那里进行验证:

public void Configure(IConfigurationProvider pr)
{
    pr.AssertConfigurationIsValid();
}

遵循这些步骤应该有效:

  1. 添加AutoMapper.Extensions.Microsoft.DependencyInjection NuGet 包裹
  2. services.AddAutoMapper(typeof(...))ConfigureServices(...).
  3. IMapper mapper 作为参数添加到 Configure(...) 方法
  4. mapper.ConfigurationProvider.AssertConfigurationIsValid();Configure(...)

示例(省略命名空间包含)

public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(typeof(Startup));
}

public void Configure(IApplicationBuilder app, IMapper mapper)
{
    mapper.ConfigurationProvider.AssertConfigurationIsValid();
}