了解 C# FromServices

Understanding C# FromServices

所以 iv 刚刚在工作中被扔进了一些新代码,它是在 C# 中。现在我对 C# 不是很熟悉,有些东西我真的不明白,主要的是注入方法。

现在有一个 WebAPI,它有一个使用 class 名为“LocalFileStorage”的控制器,它是另一个项目的依赖项,class 的构造函数如下所示。

 public class LocalFileStorageHandler : IStorageHandler
    {
       *Bunch of private variables

        public LocalFileStorageHandler(DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger)
        { code here}

现在在控制器中 class 每个使用 LocalFileStorage 的方法都将其作为参数注入。这是一个例子:

public async Task<IActionResult> ApiMapper([FromBody] dynamic request, [FromServices] IStorageHandler storageHandler)
        

同样在项目startup.cs中我们可以找到这一行:

services.AddScoped<IStorageHandler, LocalFileStorageHandler>();

现在我的理解是,对于每个单独的请求,Addscoped 确保该方法获得它自己的 LocalFileStorage 处理程序实例。我也明白“[FromServices]”属性导致这个实例被注入到方法中。但是,我不明白并且无法在代码中的任何地方找到的一件事是 LocalFileStorage 对象在何处为其构造函数获取“In 参数”?

据我了解,每个注入的 LocalFileStorage 实例还应该接收参数:

DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger 

我在这里错过了什么?

亲切的问候

DI 容器为您注入依赖项。所以在某处,DbContext、IConfiguration 和 ILogger 已经 registered/setup。

然后当你使用 FromServices 属性时,DI 容器会尝试为你解析类型并注入所有依赖项(如果它们已注册,否则将抛出异常)

IConfiguration 和 ILogger 通常在构建主机时设置。 DbContext(通常)使用 AddDbContext 扩展方法注册。

Link 到 ILogger 的配置:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-6.0#logging-providers

Link 到 IConfiguration 的配置:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0#default-configuration

Link ASP.Net 核心中的依赖注入基础:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-6.0