.NET Core web 專案, a.k.a ASP.NET Core, 內建了 Dependency Injection 機制,不需要再另外安裝套件才可使用 DI 了。事實上,.NET Core的專案要擴充功能,也都是利用 DI 來新增至系統內。例如 .AddMvc()
內建服務
初始時,就已經有以下的服務
ASP.NET 也內建許多服務,像是 MVC
, EntityFramework
,而這一類的新增方式是透過 AddServiceName
的模式新增至 IServiceCollection
中。
1 | // This method gets called by the runtime. Use this method to add services to the container. |
註冊服務
當自己所開發的功能想要註冊系統內,也需要走一樣的路徑。是需要被加到 ServiceCollection
內。但根據生命週期的差異,所使用的註冊方式也會有所不一樣
AddTransient
Transient
: 服務在每次被執行時,都會建立一個新的執行實體。這模式很適合 lightweight
、stateless
的服務。
1 | services.AddTransient<IOperationTransient, Operation>(); |
AddScoped
Scoped
: 服務會在被要求時建立一次,而在這次要求期間,服務不論執行幾次,都不會再次被重新建立。
1 | services.AddScoped<IOperationScoped, Operation>(); |
AddSingleton
Singleton
會在第一次呼叫時被建立或是在 ConfigureServies
內被執行,之後程序如果有執行到這一個服務時,基本上都是使用相同的實體
1 | services.AddSingleton<IOperationSingleton, Operation>(); |