2011-01-03 6 views
1

Ninjectを使用してIListフィールドを含むクラスにカスケードインジェクションを実装しようとしています。 kernel.Getメソッドで使用する各バインディングを特に指定しない限り、IListプロパティには常に単一のデフォルトオブジェクトのリストが挿入されているようです。Ninject IListを使用したInectionの継承

次のVSTestコードは、この問題を示しています。 IListフィールドにName = nullのMyTypeオブジェクトが1つ含まれているため、最初のテストは失敗します。 2番目のテストは合格ですが、Ninjectに使用するコンストラクタ引数を具体的に伝えなければなりませんでした。 MVC 3用のninject.web.mvcプロジェクトの最新のビルドを使用しています。

NinjectはIListを個別に扱いますか、これを処理する良い方法はありますか?これは、IListを使用している場合にのみ問題があるように見えることに注意してください。 IListをラップするカスタムコレクションオブジェクトを作成すると、最初のテストで期待どおりに動作します。

答えて

4

リストは、コレクションと配列がわずかに異なります。これらの型の場合、ninjectはジェネリック型のすべてのバインディングのインスタンスを含むリストまたは配列を挿入します。あなたの場合、実装タイプはデフォルトでaoutoboundであるクラスです。リストにはそのクラスのインスタンスが1つ含まれます。そのクラスにインターフェイスを追加してこのクラスを使用すると、リストは空になります。

+0

Count()、Exists()、IndexOf()などのようなものをどうやって整理しますか? –

+0

@IgnacioSolerGarciaインターフェイスはIList から派生する可能性があります。たとえば、 'IMyList :IList 'となります。備考:質問者が提供する例では、「モデル」は実際にはリストから派生しているわけではなく、リストのすべての機能を提供しているわけでもないので、その場合意味がありません。 – BatteryBackupUnit

関連する問題