2012-05-09 4 views
11

私は、デフォルト値を持つパラメータを持つコンストラクタを持つクラスを持っています。 Ninject 2.2で、それは[Optional]属性を称えるでしょうし、無結合で細かい仕事コンストラクタに対するがそうのように宣言定義さ:Ninject 3.0にアップグレードしているのでデフォルトのパラメータ値をNinject 3.0で使用

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

、このオブジェクトの構築があることを示すメッセージで失敗activatinエラー:

Ninject.ActivationException:ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTestが例外をスローした

試験方法:プロバイダがnullを返しましたg IValidator {PersonName} IValidator {PersonName}の条件付き暗黙的自己バインディングを使用するIValidator {PersonName}

プロバイダがnullを返しました。

活性化経路:

2)型EmployeeValidatorのコンストラクタのパラメータpersonNameValidatorに依存IValidator {PersonNameの}の注射

1)IValidatorの要求{従業員}

提案:

1)プロバイダーが作成要求を適切に処理することを確認します。

パラメータのデフォルト値が存在する場合でも[Optional]属性は引き続き適用されますが、このようなオプションのパラメータを使用して注入を処理する最良の方法は何ですか?

答えて

15

この状況では、常にデフォルト値が使用可能なため、オプション属性は無視されます。ただし、指定された値はnullです。 Nullはデフォルトでは許可されていません。

NinjectSettings.AllowNullInjectionをtrueに設定すると、この動作を無効にできます。

+0

これは意味があります。おかげさまでレモ! –

+0

@Davester:エラーメッセージの改善のためのプルリクエストのような臭い:P –

+3

'NinjectSettings.AllowNullInjection'は一般に静的なプロパティであると仮定した場合の' kernel.Settings 'プロパティです。 – nicodemus13

関連する問題