Использование значений параметров по умолчанию с помощью 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}

Поставщик возвращает null.

Путь активации:

2) Инъекция зависимости IValidator {PersonName} в параметр personNameValidator конструктора типа EmployeeValidator

1) Запрос для IValidator {Employee}

Предложения:

1) Убедитесь, что поставщик правильно обрабатывает запросы на создание.

Атрибут [Optional] по-прежнему соблюдается, когда присутствует значение по умолчанию для параметра, и каков наилучший способ обработки инъекции с такими необязательными параметрами, как этот?

Ответ 1

Необязательный атрибут игнорируется в этой ситуации, потому что всегда имеется значение по умолчанию. Но предоставленное значение равно null. По умолчанию Null не является допустимым значением.

Вы можете переопределить это поведение, установив для NinjectSettings.AllowNullInjection значение true.