12

デフォルト値を持つパラメーターを持つコンストラクターを持つクラスがあります。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) EmployeeValidator 型のコンストラクターのパラメーター personNameValidator への依存関係 IValidator{PersonName} の注入

1) IValidator{Employee} のリクエスト

提案:

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

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

4

2 に答える 2

17

この状況では、使用可能なデフォルト値が常に存在するため、Optional 属性は無視されますが、指定された値は null です。デフォルトでは、Null は許可された値ではありません。

NinjectSettings.AllowNullInjection を true に設定することで、この動作をオーバーライドできます。

于 2012-05-09T15:57:35.817 に答える