2011-03-02 43 views
13

如何配置Ninject以使用我的構造函數注入來解析null?我使用工廠方法ToMethodInTransientScope。如果某些事情未得到滿足,我的工廠將返回null。然而,Ninject拋出一個異常,迫使我使用一個無參數的構造函數,這是我想避免的。使用ToMethod時,將Ninject配置爲null

我綁定是這樣的:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod()) 
    .InTransientScope(); 

someFactoryMethod()可能返回IClientnull

我想注入的類獲取null而不是例外。當我使用TryGet時,當我試圖解決它時,我在我的注入類中得到了null

我正在使用最新的Ninject for .Net 4.0。

回答

15

預防。改爲使用Null Object pattern。這可以防止具有零檢查polute您的代碼庫:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod() ?? NullClient.Instance) 
    .InTransientScope(); 

// Null Object implementation of IClient 
public class NullClient : IClient 
{ 
    public static readonly IClient Instance = new NullClient(); 

    // Implement the members of IClient to do nothing. 
    public void ClientOperation() 
    { 
     // noop. 
    } 
} 
27

您必須配置允許null。我手頭沒有源代碼的時刻,但它應該是這樣的:使用null作爲特殊情況

new StandardKernel(new NinjectSettings { AllowNullInjection = true }); 
+18

有沒有一種方法可以在我的「綁定」調用中指定這一點? – 2011-03-02 01:57:01

1

您可以標記與Optional屬性構造函數。

+13

我不想用Ninject屬性來裝飾我的類。 – 2011-03-03 01:35:48