AddAutoMapper不会在asp.net核心中加载所有程序集

时间:2019-09-27 07:04:23

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

Reference - From official AutoMapper docs

ASP.NET Core

有一个NuGet packagehere中所述的默认注入机制一起使用,并在this project中使用。

  

您使用profiles定义配置。然后你让   AutoMapper知道这些配置文件在哪些程序集中定义   在以下位置调用IServiceCollection扩展方法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
}