我們有一個控制檯應用程序,它執行許多不同的事情。很多不同的事情,它的作用取決於我們作爲命令行參數傳入的內容。它最初是以這種方式構建的,所以它只在我們的構建服務器中佔用了一個許可位置,並且在提出拆分時遇到了一些阻力。SimpleInjector - 「Lazy」實例化一個具有第一次使用依賴關係的單例
這個應用程序使用SimpleInjector的IoC ...問題是,我們有一堆單身人士的服務,沒有用於任何給定的操作,並且他們加載每次使用...這是令人生厭的慢。我只想加載實際用於任何給定操作的依賴關係。
看起來好像圍繞着Lazy<TService>
有很多文檔,但實際上很令人沮喪。看來懶惰的構造函數並不知道它正在使用的容器,所以它必須使用無參數的構造函數或價值工廠,它似乎也不知道依賴項所在的容器。
是我想做的事SimpleInjector?我一直在玩Lazy generic的各種版本,但我似乎無法得到我想要的。
「我們有一堆單獨的服務不用於任何給定的操作,並且每次使用都會加載......這太令人厭煩了。」這是你要詳細說明的,因爲Simple Injector速度很快,並且類的創建[應該很快](http://blog.ploeh.dk/2011/03/03/InjectionConstructorsshouldbesimple/)。爲什麼這很慢? – Steven
@Steven單例類本身很慢實例化。其中許多是API消費者,它從遠程站點收集身份驗證令牌或其他內容,或者在內部構建緩存。 –
我想(再次)參考[這篇文章](http://blog.ploeh.dk/2011/03/03/InjectionConstructorsshouldbesimple/)。你不應該在構造函數中做任何計算相關性。如果你需要建立一個緩存,那就懶洋洋地去做吧:不是在建設過程中。 – Steven