[程式開發日記] ASP.NET Core的Singleton主動建立與被動建立 | 關於AddSingleton的執行順序
在ASP.NET Core中
常常使用Service做DI(依賴注入)動作
但是使用AddSingleton時
會遇到只有在呼叫時
才會建立物件的情況
所以針對標題的兩種情況
"被動建立"通常是使用如下方式
services.AddSingleton<MyClass>();
或是使用Func委派建立(通常都是有額外參數需要手動注入)
services.AddSingleton<MyClass>(new Func<IServiceProvider, MyClass>(() => {
return new MyClass();
}));
針對"主動建立"可以使用以下方式
services.AddSingleton<MyClass>(new MyClass());
services.AddSingleton<MyClass>(new MyClass("Hello", "World"));
但是如果遇到建構子有多參數時
也不太可能像這樣一一注入
而且遇到注入順序也不好解
所以這時候就可以這樣寫
//在ConfigureServices方法...
services.AddSingleton<MyClass>();
//在Configure方法...
app.ApplicationServices.GetService<MyClass>();
上述兩行程式碼分別在不同的方法中呼叫
在第一行註冊之後
第二行會取得這個物件
(但是什麼事都不用做)
這樣的順序就能達成所謂的"主動建立"情況
這種方式適合某些情況使用
例如"主動定時執行"
留言