IEnumerable
をNinjectのコンストラクタに挿入しようとしています。Ninjectファクトリメソッドを持つコンストラクタにIEnumerableを注入
私のコンストラクタは次のようになります。
public MatrixViewModel(IEnumerable<FooViewModel> fooViewModels)
{
_fooViewModels = fooViewModels;
}
マイNinjectモジュールは次のようになります。
public class MainModule : NinjectModule
{
public override void Load()
{
Bind<IEnumerable<FooViewModel>>()
.ToMethod(context => GetFooViewModels())
.InSingletonScope(); // this binding is not working
}
private IEnumerable<FooViewModel> GetFooViewModels()
{
// returns a bunch of foo view models
}
}
これは動作していないようです。私は何の誤りもありません。 Ninjectはバインディングを使用することはなく、コンストラクタに渡される値は基本的に空のデフォルト値です。
IEnumerable
にNinjectをどのように注入しますか?
編集は私のファクトリメソッドで
詳細:
private IEnumerable<FooViewModel> GetFooViewModels()
{
return new[]
{
new FooViewModel
{
Bar = new BarViewModel
{
X = 1,
Y = 2
},
Misc = "Hello"
},
new FooViewModel
{
Bar = new BarViewModel
{
X = 3,
Y = 4
},
Misc = "Goodbye"
},
// etc.....
};
}
レモの答えに基づいて編集2
、一つの可能な解決策をバインドするために、foreachループを使用することです一度に1つのモデルを表示します。
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
私は確信して、コレクションのサポートはないですか 'ToMethod'がそのように動作します。 'Bind()。ToMethod(context => new MatrixViewModel(GetFooViewModels()))'これはうまくいくはずです。また、自分の質問に自分の答えを追加して、レモが答えとして受け入れたいレベルにあまりない場合は、それを受け入れることができます。 –
@Merlyn、それは良い点です...ただ "レベルアップ"してMatrixViewModel全体をバインドしてください(私の実際のビューモデルにはいくつかのパラメータがありますので、全体をバインドするにはもう少し作業が必要です)。私の解答を答えに入れなかった理由は、私はあなたのコメントについて同じことを尋ねることができました:) – devuxer
真:これには確かに複数の有効な解決策があります... –