簡體   English   中英

ASP.NET Core 中 IoC 服務容器上下文中的請求是什么?

[英]What are the requests in the context of an IoC services container in ASP.NET Core?

ASP.NET Core 中 IoC 服務容器上下文中的請求是什么?

我正在這些教程的幫助下學習 ASP.NET Core。 我遇到了以下摘錄:

Scoped:IoC 容器將為每個請求創建一次指定服務類型的實例,並將在單個請求中共享。

我無法理解我們在這里談論的是什么要求? 這是否意味着每次后端控制器處理請求時都會創建一個新的 IoC 容器提供的服務實例並將其隱式放置在類(代表控制器)字段中? 或者這是否意味着其他類型的請求?

換句話說,如果我們有:

public void ConfigureServices(IServiceCollection services)
{
    services.Add(new ServiceDescriptor(typeof(ILog), typeof(MyConsoleLogger), ServiceLifetime.Scoped));
}

public class HomeController : Controller
{
    ILog _log;

    public HomeController(ILog log)
    {
        _log = log;
    }
    public IActionResult Index()
    {
        _log.info("Executing /home/index");

        return View();
    }
}

每次請求由HomeController控制器處理時,我們會在_log有一個不同的ILog實例嗎?

是的,將為每個 HTTP 請求創建一個新對象。 這對於非線程安全的有狀態依賴項非常有用。 實體框架對象上下文需要以這種方式處理,這是臭名昭著的。

如果依賴項是無狀態的或線程安全的,您可以將其配置為另一個生命周期,以便在應用程序的生命周期內僅創建和重用單個對象。

像上面的HomeController這樣的控制器總是按請求創建。 IIRC,你不能改變這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM