首页 > 解决方案 > AddAutoMapper 不会在 asp.net 核心中加载所有程序集

问题描述

我有以下代码将自动映射器添加到我的应用程序中。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddHttpClient();

    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}

AppDomain.CurrentDomain.GetAssemblies()返回仅在调用它时加载的程序集。我可以看到我的一些包含我的映射的程序集尚未加载,因此未加载映射,这会返回有关缺少映射类型的错误。

如何获取我的项目引用的所有程序集?

标签: c#asp.net-core.net-coreautomapper

解决方案


参考 - 来自官方 AutoMapper 文档

ASP.NET 核心

有一个NuGet 包可与此处描述的默认注入机制一起使用,并在此项目中使用。

您使用配置文件定义配置IServiceCollection然后让 AutoMapper 知道在启动时调用扩展方法定义的那些配置文件在哪些程序集中AddAutoMapper

services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);

或标记类型:

services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);

现在您可以在运行时将 AutoMapper 注入您的服务/控制器:

public class EmployeesController {
    private readonly IMapper _mapper;

    public EmployeesController(IMapper mapper) => _mapper = mapper;

    // use _mapper.Map or _mapper.ProjectTo
}

推荐阅读