我有一个类,其中构造函数带有一个默认值的参数。使用 Ninject 2.2,它将遵循 [Optional]
属性并正常工作,即使没有针对这样声明的构造函数定义绑定:
public EmployeeValidator([Optional] IValidator<PersonName> personNameValidator = null)
自从升级到 Ninject 3.0 后,构建该对象失败,并出现消息说明提供程序返回了 null 值:
当有参数的默认值时,测试方法 ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest 引发异常:
Ninject.ActivationException: 使用 IValidator{PersonName} 的条件隐式自绑定时激活错误。
提供程序返回 null 值。
激活路径:
2) 将依赖项 IValidator{PersonName} 注入 EmployeeValidator 类型的构造函数中的 personNameValidator 参数
1) 请求 IValidator{Employee}
建议:
1) 确保提供程序正确处理创建请求。
[Optional]
属性是否仍然有效,并且处理可选参数注入的最佳方式是什么?
NinjectSettings.AllowNullInjection
通常是kernel.Settings
属性,对于那些假设它是静态属性的人来说。 - nicodemus13