2016-01-12 33 views
1

我該如何實現以下目標?如何將open generic綁定到null常量?

Kernel.Bind(typeof(SomeType<>)).ToConstant(null); 

這行代碼將失敗,因爲編譯器不能推斷從使用null類型。由於我使用的是開放泛型類型,因此我無法將其作爲通用參數傳遞給它。

有沒有辦法解決這個問題?

+2

爲什麼你需要這個?將'null'注入爲依賴不是一個好方法。考慮使用空對象模式。 –

回答

0

雖然我沒有看到做這件事的理由,特別是因爲我真誠地懷疑ninject會有任何想法如何解決它,您可以創建一個空實例並直接綁定到該實例。

下編譯但你想在運行時什麼也不會做的:

var kernel = new StandardKernel(); 

SomeType<int> constant = null; 
kernel.Bind(typeof(SomeType<>)).ToConstant(constant); 

public class SomeType<T>{ } 

它實際上將拋出一個ActivationContext錯誤類似於以下內容:

ActivationException:錯誤激活SomeType {int}使用 從SomeType {T}綁定到常量值Provider返回 null。

所以不,如果你想使用一個常量值,它需要是一個非空值才能成功解析。

相關問題