所以 iv 只是被扔進了一些作業中的新代碼和它的 C# 中。現在我對 C# 不是很熟悉,有些事情我真的不明白,主要是注入方法。
現在有一個 WebAPI,它有一個控制器,它使用一個名為“LocalFileStorage”的類,它是另一個專案的依賴項,該類的建構式看起來像這樣。
public class LocalFileStorageHandler : IStorageHandler
{
*Bunch of private variables
public LocalFileStorageHandler(DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger)
{ code here}
現在在控制器類中,每個使用 LocalFileStorage 的方法都將其作為引數注入。下面是一個例子:
public async Task<IActionResult> ApiMapper([FromBody] dynamic request, [FromServices] IStorageHandler storageHandler)
同樣在專案 startup.cs 中,我們可以找到這一行:
services.AddScoped<IStorageHandler, LocalFileStorageHandler>();
現在我的理解是,對于每個單獨的請求,Addscoped 確保該方法獲得自己的 LocalFileStorage 處理程式實體。我也明白“[FromServices]”屬性會導致這個實體被注入到方法中。但是,我不明白并且在代碼中的任何地方都找不到的一件事是 LocalFileStorage 物件從何處獲取其建構式的“輸入引數”?
據我了解,每個注入的 LocalFileStorage 實體也應該接收引數:
DbContext dbContext, IConfiguration configuration, ILogger<LocalFileStorageHandler> logger
我在這里錯過了什么?
親切的問候
uj5u.com熱心網友回復:
DI 容器為您注入依賴項。所以在某處,DbContext、IConfiguration 和 ILogger 已經注冊/設定。
然后當你使用 FromServices 屬性時,DI 容器會嘗試為你決議型別并注入所有依賴項(如果它們已注冊,否則將拋出例外)
IConfiguration 和 ILogger 通常在構建主機時設定。DbContext(通常)使用 AddDbContext 擴展方法注冊。
ILogger 配置鏈接:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/ ? view = aspnetcore-6.0#logging-providers
IConfiguration 配置鏈接:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ ? view = aspnetcore-6.0#default-configuration
鏈接到 ASP.Net Core 中的依賴注入基礎知識:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection? view = aspnetcore-6.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356609.html
