Tôi đang cố gắng tiêm một IEnumerable
vào một hàm tạo với Ninject.Tiêm một IEnumerable vào một hàm tạo với phương thức nhà máy Ninject
constructor của tôi trông như thế này:
public MatrixViewModel(IEnumerable<FooViewModel> fooViewModels)
{
_fooViewModels = fooViewModels;
}
My Ninject mô-đun trông như thế này:
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
}
}
này dường như không có tác dụng. Tôi không nhận được bất kỳ lỗi nào. Ninject không bao giờ sử dụng ràng buộc, và giá trị được truyền vào constructor về cơ bản chỉ là một giá trị mặc định rỗng.
Làm cách nào để bạn tiêm IEnumerable
với Ninject?
Sửa
tin chi tiết về phương pháp nhà máy của tôi:
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.....
};
}
Chỉnh sửa 2
Dựa trên câu trả lời Remo, người ta giải pháp khả thi là sử dụng một vòng lặp foreach để ràng buộc xem từng mô hình một:
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
Tôi không phải là hỗ trợ bộ sưu tập chắc chắn hoặc 'ToMethod' hoạt động theo cách đó. Điều này sẽ làm việc mặc dù: 'Bind(). ToMethod (context => new MatrixViewModel (GetFooViewModels()))'. Ngoài ra, bạn có thể thêm câu trả lời của riêng mình cho câu hỏi của mình và chấp nhận câu hỏi đó nếu Remo không hoàn toàn đạt đến cấp độ bạn muốn chấp nhận làm câu trả lời. –
@ Merlyn, đó là một điểm tốt ... chỉ cần "đi lên một cấp" và ràng buộc toàn bộ MatrixViewModel (mô hình xem thực của tôi có một vài thông số mặc dù, do đó, nó sẽ là một chút công việc để ràng buộc toàn bộ điều). Đối với lý do tại sao tôi đã không đưa giải pháp của tôi vào một câu trả lời, tôi có thể hỏi bạn cùng một điều về bình luận của bạn :) – devuxer
Đúng :) Có chắc chắn nhiều giải pháp hợp lệ để ... –