ASP.NET Core中IoC服务容器的上下文中有什么请求?

问题描述 投票:1回答:1

在ASP.NET Core中IoC服务容器的上下文中有哪些请求?

我正在these教程的帮助下学习ASP.NET Core。我遇到了以下摘录:

范围: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();
    }
}

每次ILog控制器处理请求时,_log中的HomeController实例是否会不同?

asp.net asp.net-core controller inversion-of-control ioc-container
1个回答
2
投票

是,将为每个HTTP请求创建一个新对象。这对于不是线程安全的有状态依赖关系很有用。臭名昭著地要求以这种方式对待实体框架对象上下文。

如果依赖关系是无状态的或线程安全的,则可以为它配置另一个生存期,以便在应用程序的生存期中仅创建和重用一个对象。

像上面的HomeController之类的控制器总是被创建每个请求。 IIRC,您无法更改。

© www.soinside.com 2019 - 2024. All rights reserved.