【问题标题】:Automapper Compile Mappings asp.net coreAutomapper 编译映射 asp.net 核心
【发布时间】:2020-06-02 18:09:51
【问题描述】:

我在我的 asp.net 核心启动类中使用以下语法来配置自动映射器:

services.AddAutoMapper(c => c.AllowNullCollections = true, AppDomain.CurrentDomain.GetAssemblies());

我希望能够在启动时编译映射。

根据 Automapper 文档,我应该可以通过:

var configuration = new MapperConfiguration(cfg => {});
configuration.CompileMappings();

如何使用 AddServices 语法访问映射配置?

【问题讨论】:

  • 你需要在启动代码的某处注入IConfigurationProvider
  • 所以我可以通过注入来访问配置提供程序(它似乎是一个单例),我可以调用 CompileMappings(),但这似乎并没有编译使用的实例单例 Mapper 实例。第一次调用 Mapper.Map(SrcInstance) 最多可能需要 8 秒。第二次,速度很快。当我注入 ConfigurationProvider 并调用 compile 时,编译需要几秒钟,但我第一次调用 Mapper.Map 仍然需要 8 秒。
  • 这听起来很不对 :) 升级 DI 包并删除所有静态映射器的使用。
  • 我正在运行最新版本的自动映射器,并且在我的代码库中没有映射器的静态实例。一切都通过 .net core DI 系统注入
  • 那我不知道你说的是什么单例映射器实例。哪有这回事。无论如何,您可以轻松删除 DI 的东西并在没有它的情况下进行简单的测试。

标签: automapper


【解决方案1】:

您可以从 AutoMapper 程序集中注入 IConfigurationProvider 的实例并以这种方式配置 AutoMapper。例如,您可以像这样使用Configure() 启动方法:

public void Configure(IApplicationBuilder app, IConfigurationProvider mapperConfiguration)
{
    mapperConfiguration.CompileMappings();
}

或者以编程方式进行:

public void Configure(IApplicationBuilder app)
{
    var mapperConfiguration = app.ApplicationServices
                                 .GetRequiredService<IConfigurationProvider>();
    mapperConfiguration.CompileMappings();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2021-07-26
    • 2019-04-13
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多