Dot-Net

使用 ToMethod 時配置 Ninject 以解決 null

  • February 8, 2013

如何配置 Ninject 以null通過建構子注入來解決?我正在使用ToMethod工廠方法和InTransientScope. null如果某些事情沒有滿足,我的工廠設計為返回。然而,Ninject 拋出一個異常,迫使我使用無參數建構子,我想避免這種情況。

我是這樣綁定的:

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

someFactoryMethod()可能返回IClientnull

我希望注入的類能夠null傳入而不是異常。當我使用時,當我嘗試解決它時TryGet,我會進入我的注入類。null

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

防止null作為特例使用。嘗試改用空對像模式。這可以防止您使用空檢查來污染您的程式碼庫:

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.
   }
}

您必須配置允許 null 。目前我手頭沒有原始碼,但它應該類似於以下內容:

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

引用自:https://stackoverflow.com/questions/5162361