1
我該如何實現以下目標?如何將open generic綁定到null常量?
Kernel.Bind(typeof(SomeType<>)).ToConstant(null);
這行代碼將失敗,因爲編譯器不能推斷從使用null
類型。由於我使用的是開放泛型類型,因此我無法將其作爲通用參數傳遞給它。
有沒有辦法解決這個問題?
我該如何實現以下目標?如何將open generic綁定到null常量?
Kernel.Bind(typeof(SomeType<>)).ToConstant(null);
這行代碼將失敗,因爲編譯器不能推斷從使用null
類型。由於我使用的是開放泛型類型,因此我無法將其作爲通用參數傳遞給它。
有沒有辦法解決這個問題?
雖然我沒有看到做這件事的理由,特別是因爲我真誠地懷疑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。
所以不,如果你想使用一個常量值,它需要是一個非空值才能成功解析。
爲什麼你需要這個?將'null'注入爲依賴不是一個好方法。考慮使用空對象模式。 –