在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
实例是否会不同?
是,将为每个HTTP请求创建一个新对象。这对于不是线程安全的有状态依赖关系很有用。臭名昭著地要求以这种方式对待实体框架对象上下文。
如果依赖关系是无状态的或线程安全的,则可以为它配置另一个生存期,以便在应用程序的生存期中仅创建和重用一个对象。
像上面的HomeController
之类的控制器总是被创建每个请求。 IIRC,您无法更改。