bir kurucuya IEnumerable enjekte etmek Ben IEnumerable
Ninject ile bir yapıcıya enjekte çalışıyorum.Bir Ninject fabrika yöntemiyle
Benim yapıcı şöyle görünür:
public MatrixViewModel(IEnumerable<FooViewModel> fooViewModels)
{
_fooViewModels = fooViewModels;
}
Benim Ninject modülü şuna benzer:
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
}
}
Bu çalışıyor gibi görünmüyor. Hiç bir hata alamıyorum. Ninject, yalnızca bağlamayı kullanmaz ve yapıcıya iletilen değer temelde yalnızca boş bir varsayılan değerdir.
Ninject ile bir IEnumerable
nasıl enjekte edersiniz?
Düzenleme benim fabrika yöntemine
Daha fazla bilgi:
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.....
};
}
Düzenleme 2
Remo'nun cevap dayanarak, olası bir çözüm bağlamak için bir foreach döngüsü kullanmaktır modelleri her seferinde bir kerede görüntüleyin:
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
Ben ToMethod' bu şekilde çalışır 'emin toplama desteği değilim ya: Remo'nun cevap dayanarak –
@Merlyn, bu iyi bir nokta ... sadece "bir seviye yukarı git" ve tüm MatrixViewModel'i bağla (gerçek görünüm modelimin bir kaç parametresi var, bu yüzden her şeyi bağlamak için biraz daha çalışır). Neden benim çözüm bir cevap vermedi gelince, ben senin yorum hakkında aynı şeyi sorabilirim :) – devuxer
Doğru :) Bu kesinlikle geçerli birden fazla geçerli çözümler var ... –