繁体   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