當我們想要讓物件延遲實例化時,可以透過 Lazy<T> + Delegate 來實現這件事,同樣的在 DI Container 也可以套件,無意間發現 Lazy Proxy 這個套件,可以簡化配置 Lazy 的配置,立馬收入武器內
2023-10-01
在 .NET 的 Dependency Injection Container 中使用延遲實例化
- 427
- 0
- DI Container
當我們想要讓物件延遲實例化時,可以透過 Lazy<T> + Delegate 來實現這件事,同樣的在 DI Container 也可以套件,無意間發現 Lazy Proxy 這個套件,可以簡化配置 Lazy 的配置,立馬收入武器內
當有一個介面(抽象),有多個實作(細節),在 Autofac 和 Unity 預設都有相關的解決方案,可以注入到屬性、方法、建構函數,這都需要使用特殊的 Attribute 來描述參數,比如 Autofac 的 [KeyFilter]、Unity 的 [Dependency],這將會讓你的物件變得不單純,必須要特殊的用法才會工作,接下來我會分享實作的方式,要怎麼選就看你了
微軟提供的 DI Container (Microsoft.Extensions.DependencyInjection ),實作了 Microsoft.Extensions.DependencyInjection.Abstractions 抽象,讓我們也可很輕易的換成我們習慣的 DI Container,比如說,內建的 Microsoft.Extensions.DependencyInjection 沒有提供掃描 Assembly 的自動註冊,這時,在應用程式的進入點換成其它的 DI Container,比如 Autofac,就可以使用自動註冊。
只有增加使用 Autofac DI Container 的註冊,其餘的不用動,像是物件的依賴關係,取出物件方式。
Microsoft.Extensions.DependencyInjection 是微軟實作的 DI Container,在 ASP.NET Core 大量的使用,無形之間已經成為一種開發標準,過去,還沒有使用 DI Container 時,我會使用靜態屬性來集中管理物件的生命週期,現在,集中管理物件的生命週期,我又多了一個選擇。
Microsoft.Extensions.DependencyInjection 支援 .NET Fx 4.6.1 以上