Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AddAutoMapper不会加载asp.net核心中的所有程序集_C#_Asp.net Core_.net Core_Automapper - Fatal编程技术网

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

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

我有以下代码将automapper添加到我的应用程序中

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
}