【发布时间】:2019-07-26 13:03:25
【问题描述】:
我在读一本书,上面写着:
当应用程序启动时,ASP.NET Core 创建
Startup类的新实例并调用其ConfigureServices方法,以便应用程序可以创建其服务,而服务是为应用程序的其他部分提供功能的对象
我有点困惑,因为它看起来像是在控制器中实际需要它之前创建了一个服务/对象。
假设只有一个控制器需要UptimeService 对象,而CalculateController(不是默认映射控制器)是唯一需要UptimeService 对象的控制器,所以我添加:
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<UptimeService>();
services.AddMvc();
}
假设我们首先通过路由到Home/Index 运行应用程序,我的问题是:
根据上图,
UptimeService总是被创建,即使我们不去Calculate/Index,因为CalculateController是唯一需要UptimeService的控制器,不是吗效率很低?经常听到“注册服务”,和“创建服务”是一样的吗?
【问题讨论】:
-
Q1:依赖实例只会在解析其依赖时创建。所以,不,它不会在启动时创建
UptimeService(基于显示的当前代码)。 Q2:没有 -
你的这两个问题都很容易测试自己。只需在单例的构造函数中添加一条日志行以及它在哪些场景中打印。
标签: c# asp.net-core dependency-injection