2012-05-09 2 views
11

У меня есть класс с конструктором, имеющим параметр со значением по умолчанию. С Ninject 2.2, он будет выполнять атрибут [Optional] и работать нормально без обязывающих определяется с конструктором объявлен следующим образом:Использование значений параметров по умолчанию с помощью Ninject 3.0

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

С обновлением до Ninject 3.0, строительство этого объекта не удается с сообщением о том, что поставщик возвращается нуль:

метод испытания ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest выбросил исключение:

Ninject.ActivationException: Ошибка activatin g IValidator {PersonName} с использованием условной неявной самообвязки IValidator {PersonName}

Провайдер возвращается null.

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

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

1) Запрос IValidator {Сотрудник}

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

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

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

ответ

15

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

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

+0

Это имеет смысл. Спасибо Remo! –

+0

@ The Daveter: пахнет как запрос на растяжение для улучшения сообщения об ошибке: P –

+3

«NinjectSettings.AllowNullInjection» обычно является свойством «kernel.Settings» для тех, кто полагает, что это статическое свойство. – nicodemus13

Смежные вопросы