Tôi đang cố gắng Liên kết hai lớp cụ thể với một giao diện. Tôi nên sử dụng lệnh nào trong Ninject để thực hiện điều đó? Những gì tôi đang cố gắng làm là gắn hai lớp cụ thể vào một cơ sở giao diện trên tên bộ điều khiển. Điều đó có thể không? Tôi cho rằng trong ninject bạn sử dụng. Khi để cung cấp cho các điều kiện nhưng không có hướng dẫn ra có nơi họ cho bạn thấy làm thế nào để sử dụng. Khi cho ninject.Ninject để liên kết trên các bộ điều khiển khác nhau
5
A
Trả lời
8
Dưới đây là một vài ví dụ. Kiểm tra dự án nguồn Ninject và tiểu dự án thử nghiệm của nó cho các mẫu sử dụng khác nhau, đó là tài liệu tốt nhất cho nó, đặc biệt là vì các tài liệu chưa được cập nhật cho v2.
// usage of WhenClassHas attribute
Bind<IRepository>().To<XmlDefaultRepository>().WhenClassHas<PageAttribute>().WithConstructorArgument("contentType", ContentType.Page);
// usage of WhenInjectedInto
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(ServicesController));
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// you can also do this
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// or this if you don't need any parameters to your constructor
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController));
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController));
// usage of ToMethod()
Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));
HTH
Các vấn đề liên quan
- 1. Ninject: Ngữ cảnh thực thể đối với bộ điều khiển
- 2. Ninject + MVC3 không được đưa vào bộ điều khiển
- 3. Các loại tiêm khác nhau trong các chức năng liên kết, điều khiển và biên dịch là gì?
- 4. Cách liên lạc giữa các bộ điều khiển trong Ember.js
- 5. liên kết Spring HandlerInterceptor chỉ với một bộ điều khiển
- 6. Sử dụng cùng một bộ điều khiển trên các phần tử khác nhau để chỉ cùng một đối tượng
- 7. Hỗ trợ các định hướng khác nhau trong iOS 6.0 cho các bộ điều khiển chế độ xem khác nhau
- 8. chuyển hướng mã hóa sang bộ điều khiển khác nhau
- 9. Liên lạc giữa các bộ điều khiển trong MVC/MVP
- 10. AngularJS - các cách khác nhau để tạo bộ điều khiển và dịch vụ, tại sao?
- 11. Kết hợp các bộ điều khiển api và bộ điều khiển trang web
- 12. CakePHP: sử dụng các mô hình trong các bộ điều khiển khác nhau
- 13. Sử dụng liên kết Ruby on Rails để liên kết với hành động điều khiển
- 14. Kích hoạt bộ điều khiển ExtJS trên siêu liên kết click
- 15. MVC Điều hướng đến giao diện điều khiển khác nhau
- 16. Trả lại các chế độ xem khác nhau từ Bộ điều khiển MVC
- 17. Liên kết nhiều điều khiển biểu đồ trong HighCharts
- 18. Chọn các giá trị đáp ứng các điều kiện khác nhau trên các hàng khác nhau?
- 19. Điều khiển + Số liên kết Tkinter
- 20. Làm cách nào để có tên Bộ điều khiển và Hành động từ Uri Liên kết?
- 21. Tôi có các tùy chọn nào để tự động hóa các liên kết với NInject
- 22. Làm thế nào để liên kết tốt nhất để một bộ điều khiển API
- 23. sự khác nhau giữa bộ điều khiển lò xo và bộ điều khiển lò xo là gì?
- 24. Liên kết MySql SELECT cho các cột khác nhau?
- 25. Sử dụng Ninject để Liên kết Thuộc tính Lọc WebApi
- 26. git đẩy tới các nhánh khác nhau trên nhiều điều khiển từ xa
- 27. Điều khiển hiển thị trên một bảng điều khiển khác
- 28. Cách tương tác giữa các bộ điều khiển khác nhau trong AngularJS
- 29. T4MVC và tên bộ điều khiển trùng lặp trong các khu vực khác nhau
- 30. Kết hợp Bộ điều khiển Điều hướng với Bộ điều khiển Thanh tab
tôi thử WhenInjectedInto() lệnh nhưng vẫn không làm việc cho tôi. Nếu bộ điều khiển của bạn có các tham số, bạn có thực sự cần phải thêm WithConstructorArgument() không? – Ganator
Không có bộ điều khiển chỉ có một hàm tạo trong IRepository, nhưng việc triển khai IRepository (trong trường hợp của tôi là XmlDefaultRepository) có hàm tạo trong tham số contentType của chuỗi kiểu, đó là ví dụ với WithConstructorArgument() dành cho. – mare
Xin lưu ý - khi các phương thức ...() và Với ...() có thể được chuỗi, bạn có thể dừng tại WhenInjectedInto(). Và, yeah, WhenInjectedInto() làm việc cho tôi out-of-the-box, rất đơn giản, miễn là việc thực hiện mẫu Repository của bạn cũng đơn giản. Bạn có thể đăng các mã cho giao diện kho lưu trữ của bạn và thực hiện nó và cho chúng tôi xem. Ngoài ra, hãy đăng mã từ global.asax.cs nơi bạn thiết lập DI. – mare