網上隨便一搜,能搜出一大堆對三者進行區別分析的文章,但是呢,理論是一回事,實際使用又是另外一回事,到底在何種場景下應該使用何種注入方式呢?
通過這篇文章和我自身的實際經驗,來說一說實際應用中的情況:
首先 AddTransient,這個文章中說的挺明白,就是當組件無法共享時,將使用Transient。非線程安全的數據庫訪問對象就是一個例子。
根據我實際遇到的情況,着重說一下 AddSingleton 和 AddScoped,畢竟這兩種實際開發中用到的比較多。
於我個人而言,我比較習慣用AddScoped,但是在一次多線程的開發過程中,出現了問題——當我在class中初始化了一個AddScoped注入的函數,然后開了一個新的線程引用它時,就會dispose掉,這是因為:AddScoped為每個請求創建一個新實例,開一個新的線程,就不能共享主線程里的了,所以要改成始終是共享的AddSingleton。
AddSingleton在全局都是共享的,其生命周期最長。