如何配置Ninject以使用构造函数注入来解析null
?我正在使用ToMethod
工厂方法和InTransientScope
。如果不满足某些要求,我的工厂将返回null
。但是,Ninject会抛出一个异常,迫使我使用无参数构造函数,我想避免使用它。
我这样绑定:
Bind<IClient>
.ToMethod(x => someFactoryMethod())
.InTransientScope();
someFactoryMethod()
可能会返回IClient
或null
。
我希望注入的类能够传入null
而不是异常。当我使用TryGet
时,当我尝试解决它时,我会在注入的课程中获得null
。
我正在使用最新的Ninject for .Net 4.0。
答案 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
属性标记构造函数。