问题 在Ninject 3.0中使用默认参数值


我有一个类,其构造函数具有一个默认值的参数。使用Ninject 2.2,它会尊重它 [Optional] 属性和工作正常 没有定义绑定 对于像这样声明的构造函数:

public EmployeeValidator([Optional] IValidator<PersonName> personNameValidator = null)

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

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

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

Provider返回null。

激活路径:

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

1)IValidator {Employee}的请求

建议:

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

是个 [Optional] 当参数的默认值存在时,属性仍然很荣幸,使用可选参数处理注入的最佳方法是什么?


2021
2018-05-09 14:16


起源



答案:


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

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


16
2018-05-09 15:57



这就说得通了。谢谢雷莫! - The Davester
@The Davester:闻起来像是一个改进错误消息的拉取请求:P - Ruben Bartelink
该 NinjectSettings.AllowNullInjection 对于那些假设它是静态属性的人来说,它通常是`kernel.Settings'属性。 - nicodemus13


答案:


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

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


16
2018-05-09 15:57



这就说得通了。谢谢雷莫! - The Davester
@The Davester:闻起来像是一个改进错误消息的拉取请求:P - Ruben Bartelink
该 NinjectSettings.AllowNullInjection 对于那些假设它是静态属性的人来说,它通常是`kernel.Settings'属性。 - nicodemus13