Mr.*_*mer 4 c# dependency-injection asp.net-core
所以 iv 刚刚在工作中投入了一些新代码,并且是用 C# 编写的。现在我对 C# 不是很熟悉,有些东西我真的不明白,主要的就是注入方法。
现在有一个 WebAPI,它的控制器使用名为“LocalFileStorage”的类,该类是另一个项目的依赖项,该类的构造函数如下所示。
public class LocalFileStorageHandler : IStorageHandler
{
*Bunch of private variables
public LocalFileStorageHandler(DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger)
{ code here}
Run Code Online (Sandbox Code Playgroud)
现在,在控制器类中,每个使用 LocalFileStorage 的方法都会将其作为参数注入。这是一个例子:
public async Task<IActionResult> ApiMapper([FromBody] dynamic request, [FromServices] IStorageHandler storageHandler)
Run Code Online (Sandbox Code Playgroud)
同样在项目startup.cs中我们可以找到这一行:
services.AddScoped<IStorageHandler, LocalFileStorageHandler>();
Run Code Online (Sandbox Code Playgroud)
现在我的理解是,对于发出的每个单独请求,Addscoped 确保该方法获取其自己的 LocalFileStorage 处理程序实例。我还了解到“[FromServices]”属性会导致该实例被注入到该方法中。然而,我不明白并且无法在代码中的任何位置找到的一件事是 LocalFileStorage 对象在哪里为其构造函数获取“In 参数”?
据我了解,每个注入的 LocalFileStorage 实例还应该接收参数:
DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
亲切的问候
DI 容器为您注入依赖项。因此,DbContext、IConfiguration 和 ILogger 已在某处注册/设置。
然后当你使用FromServices属性时,DI容器会尝试为你解析类型并注入所有依赖项(如果它们已注册,如果没有,则会抛出异常)
IConfiguration 和 ILogger 通常在构建主机时设置。DbContext(通常)使用 AddDbContext 扩展方法注册。
ILogger 配置链接:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/ ?view=aspnetcore-6.0#logging-providers
IConfiguration 的配置链接:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ ?view=aspnetcore-6.0#default-configuration
链接到 ASP.Net Core 中的依赖注入基础知识:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection ?view=aspnetcore-6.0
| 归档时间: |
|
| 查看次数: |
6492 次 |
| 最近记录: |