2011-03-01 62 views
4

隨着Ninject 2.2,有什麼辦法可選擇注入一個屬性?在圖書館,我注入性能管理器如下:可選地注入一個屬性Ninject

[Inject] 
public IPerformanceManager PerformanceManager 
{ 
    private get; set; 
} 

但這個庫的多種用途,我不感興趣紋的表現,所以我想這個屬性爲null。如果我根本不聲明IP性能管理器的綁定,我會得到以下錯誤:

Error activating IPerformanceManager No matching bindings are available, and the type is not self-bindable. Activation path: 5) Injection of dependency IPerformanceManager into property PerformanceManager of type PluginDomainManager etc...

好的,公平的。所以不是,我想它綁定到返回NULL的方法:

kernel.Bind<IPerformanceManager>().ToMethod(m => null); 

但現在給人的錯誤:

Error activating IPerformanceManager using binding from IPerformanceManager to method Provider returned null. Activation path: 5) Injection of dependency IPerformanceManager into property PerformanceManager of type PluginDomainManager etc...

所以注入的屬性將永遠不會空?我覺得這很令人驚訝。任何想法如何完成可選的注入屬性?

回答

5

你應該能夠與OptionalAttribute

這來裝飾你的PerformanceManager將阻止內核從拋出異常激活,如果它不能解析的粘合劑。它會將你的依賴關係設置爲null,就像你想的那樣。

+0

完美,謝謝......在文檔的任何地方都找不到。 – 2011-03-01 22:56:38

+0

是否有可能將綁定標記爲可選,以便不使用可選屬性來裝飾每個位置? – 2011-07-01 11:03:24

+0

@bsnote,綁定不能設置爲可選項 – Vadim 2011-07-04 14:20:24