C# AddAutoMapper不会加载asp.net核心中的所有程序集
我有以下代码将automapper添加到我的应用程序中C# AddAutoMapper不会加载asp.net核心中的所有程序集,c#,asp.net-core,.net-core,automapper,C#,Asp.net Core,.net Core,Automapper,我有以下代码将automapper添加到我的应用程序中 public void配置服务(IServiceCollection服务) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddHttpClient(); AddAutoMapper(AppDomain.CurrentDomain.GetAssemblys()); } AppDomain.CurrentDoma
public void配置服务(IServiceCollection服务)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddHttpClient();
AddAutoMapper(AppDomain.CurrentDomain.GetAssemblys());
}
AppDomain.CurrentDomain.GetAssemblys()
仅返回调用时加载的程序集。
我可以看到一些包含映射的程序集尚未加载,因此映射未加载,这会返回有关缺少映射类型的错误
如何获取项目引用的所有程序集?
ASP.NET核心
有一个用于中描述和使用的默认注入机制
您可以使用定义配置。然后你让
AutoMapper知道这些配置文件是在什么程序集中定义的
调用IServiceCollection
扩展方法AddAutoMapper
at
启动:
或标记类型:
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
}
为什么需要传递参数services.AddAutoMapper方法。您可以像services.AddAutoMapper()一样直接调用它。这对我来说很好。此外,您是否创建了从概要文件继承的Automapper概要文件类?是的,我创建了概要文件。AddAutoMapper()被标记为已过时“
AppDomain.CurrentDomain.GetAssemblys()
只返回调用它时加载的程序集”—因此它可以按设计工作。如果需要其他程序集,则直接传递这些程序集。这就是无参数重载过时的确切原因:)您可以显式传递程序集,或编写代码自己加载它们。在应用程序启动期间不加载哪个程序集?是否有任何演示可以重现您的问题?我正在寻找一种方法来避免逐个显式指定程序集。我想没有任何方法可以获取所有引用的程序集,因此我必须显式地设置这些程序集。一旦第一次使用这些程序集,它们将被加载到应用程序域中。因此,是的,您应该明确指定(Profile)的类型,这将最终加载程序集。我正在寻找的是找到一种获取引用程序集的方法
public class EmployeesController {
private readonly IMapper _mapper;
public EmployeesController(IMapper mapper) => _mapper = mapper;
// use _mapper.Map or _mapper.ProjectTo
}