我正在使用Ninject 1.0,並希望能夠將惰性初始化委託注入到構造函數中。因此,考慮到通用委託定義:使用Ninject的惰性泛型委託初始化
public delegate T LazyGet<T>();
我只是想這種結合IKernel.Get(),這樣我可以通過一個懶惰的吸氣劑置入構造,例如
public class Foo
{
readonly LazyGet<Bar> getBar;
public Foo(LazyGet<Bar> getBar)
{
this.getBar = getBar;
}
}
但是,我不能簡單地調用Bind<LazyGet<T>>()
,因爲它是一個開放的泛型類型。我需要這是一個開放的泛型,所以我不必綁定所有不同的懶惰獲取顯式類型。在上面的例子中,應該可以動態地創建一個通用代理,調用IKernel.Get<T>()
。
Ninject 1.0如何實現?
注入的依賴是顯式的指定偷懶,國際海事組織,一漏抽象。有關詳細信息,請參閱此處:http://blog.ploeh.dk/2010/01/20/RebuttalConstructorOverinjectionAntipattern.aspx – 2010-02-25 13:55:38
我知道,但我正在轉換一個現有的代碼庫,其中包含很多高度耦合的靜態代碼。這只是擺脫所有靜態類的第一步。 – 2010-02-25 13:58:21
足夠公平:)無論如何,我從不意味着我的評論是不屑一顧的。然而,我指出的這篇文章確實提供了一個明確實施懶惰作爲裝飾者的出路。我只是不想提供這個答案,因爲你可能會從其他人得到一個適當的Ninject答案:) – 2010-02-25 14:02:24