使用ToMethod时配置Ninject以解析null

时间:2011-03-02 01:15:00

标签: .net dependency-injection ioc-container ninject

如何配置Ninject以使用构造函数注入来解析null?我正在使用ToMethod工厂方法和InTransientScope。如果不满足某些要求,我的工厂将返回null。但是,Ninject会抛出一个异常,迫使我使用无参数构造函数,我想避免使用它。

我这样绑定:

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

someFactoryMethod()可能会返回IClientnull

我希望注入的类能够传入null而不是异常。当我使用TryGet时,当我尝试解决它时,我会在注入的课程中获得null

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

3 个答案:

答案 0 :(得分:29)

您必须配置允许null。我目前没有源代码,但它应该类似于以下内容:

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

答案 1 :(得分:15)

防止使用null作为特例。请尝试使用Null Object pattern。这可以防止您必须使用空检查来对代码库进行轮询:

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

答案 2 :(得分:2)

您可以使用Optional属性标记构造函数。