在Ninject 3.0中使用默认参数值

我有一个类,其构造函数具有一个默认值的参数。 使用Ninject 2.2,它将遵循[Optional]属性并且正常工作,没有针对如此声明的构造函数定义绑定

 public EmployeeValidator([Optional] IValidator personNameValidator = null) 

从升级到Ninject 3.0后,此对象的构造失败,并显示一条消息,指出提供程序返回null:

测试方法ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest引发exception:

Ninject.ActivationException:使用IValidator {PersonName}的条件隐式自绑定激活IValidator {PersonName}时出错

Provider返回null。

激活路径:

2)将依赖IValidator {PersonName}注入到EmployeeValidator类型的构造函数的参数personNameValidator中

1)IValidator {Employee}的请求

建议:

1)确保提供程序正确处理创建请求。

当参数的默认值存在时, [Optional]属性是否仍然符合,并且使用可选参数处理注入的最佳方法是什么?

在这种情况下会忽略Optional属性,因为始终有可用的默认值 – 但提供的值为null。 默认情况下,Null不是允许的值。

您可以通过将NinjectSettings.AllowNullInjection设置为true来覆盖此行为。