Tôi muốn để ràng buộc nhiều triển khai của một dịch vụ và có tất cả trong số họ gọi cùng một lúc:Ninject Multicasting
var kernel = new StandardKernel();
kernel.Bind<IBreakfast>.To<Spam>();
kernel.Bind<IBreakfast>.To<Eggs>();
kernel.Bind<IBreakfast>.To<MoreSpam>();
kernel.Get<IBreakfast>().Eat(); // call Eat method on all three bound implementations
Ninject không như thế, và sẽ ném một ngoại lệ về việc có nhiều ràng buộc. Có cách nào tôi có thể nhận được xung quanh lỗi đó, và có tất cả các triển khai được gọi là?
Ngoài ra, các cuộc gọi Bind<>
có thể nằm trong các dự án khác nhau có thể hoặc không được tải trong thời gian chạy, do đó việc tạo một triển khai duy nhất để gọi chúng sẽ không hoạt động. Đây là một phần của kiến trúc plug-in cho trang web ASP.NET MVC 3.
Tôi sẽ cố gắng này vào buổi sáng khi tôi nhận được để làm việc, nhưng sẽ không Ninject ném một lỗi trên cuộc gọi thứ hai cho 'Bind <> () .Để <>() '? – MikeWyatt
@MikeWyatt: Không, nhiều 'Bind' là tốt. Không có gì là tốt với 'Get' cho kết quả nhiều hơn một mục 'Single'. Nếu bạn muốn thực hiện điều đó, bạn có thể sử dụng 'GetAll ' (hoặc sử dụng việc sắp xếp nhiều lần lên nhiều đăng ký qua 'Danh sách ', 'T []' hoặc 'IEnumerable 'như được đề xuất) (Và những người đăng/mã như các bài kiểm tra không bao giờ đăng nội dung mà thổi lên!). Lưu ý rằng Ninject không có nhiều bất kỳ để tạo ra một Composite phức tạp để phát đa hướng các cuộc gọi theo cách bạn muốn. –
Công trình này tuyệt vời. Cảm ơn. – MikeWyatt