c# - 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()
返回仅在调用它时加载的程序集。我可以看到我的一些包含我的映射的程序集尚未加载,因此未加载映射,这会返回有关缺少映射类型的错误。
如何获取我的项目引用的所有程序集?
解决方案
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
}
推荐阅读
- wordpress - 自定义帖子类型的多个用户角色
- sql - 更改 SQL 中列的显示顺序
- next.js - Nextjs 和工作箱集成
- angular - 有什么方法可以在 Ag-Grid(Angular)中使用 API 调用中的 coldefs 字段值?
- angular - GitLab 管道因异常而失败:无法读取未定义的属性“减号”
- ruby - 有没有办法使用 RuboCop 进行增量 linting?
- c# - .NET 应用程序在错误的位置寻找运行时
- javascript - 如何在一个html页面中运行多个录音实例?
- mysql - MySql:如何使用两个日期时间字段获取每个组的最新记录?
- python - Python 中的 HackerRank 数组操作