Bạn có thể đưa ra ví dụ về cách bạn sẽ sử dụng (khung hình DI) yêu thích của bạn để kết nối Mô hình Xem MVVM cho ứng dụng WPF không? Bạn sẽ tạo ra một hệ thống phân cấp mạnh mẽ của View Models (giống như nơi mà mỗi ViewModel của kiểm soát lồng nhau là một thuộc tính trên ViewModel của cha mẹ và bạn liên kết nó với DataContext của điều khiển lồng nhau trong XAML) hoặc bạn sẽ sử dụng một số loại -abstract "" Xem mô hình "Quản lý", mà duy trì một số hệ thống phân cấp kết nối yếu ... như trong CAB, có lẽ?Làm thế nào tôi có thể kết hợp MVVM và Dependency Injection trong một ứng dụng WPF?
Trả lời
Nếu mô hình chế độ xem chỉ có thể tồn tại cùng với một mô hình khác, tôi tạo mối quan hệ mạnh mẽ. Đó là mô hình xem sở hữu sẽ có tham chiếu trực tiếp đến một hoặc nhiều mô hình chế độ xem phụ thuộc. Nếu, mặt khác, một mô hình xem sẽ có thể tồn tại có hoặc không có một mô hình khác, tôi sử dụng một cách tiếp cận lỏng lẻo, nơi chúng giao tiếp thông qua một bus sự kiện.
Về mặt sử dụng DI với MVVM, tuyệt đối bạn có thể kết hợp cả hai. Nó đơn giản như:
public class MyViewModel
{
private readonly IMyDependency _myDependency;
public MyViewModel(IMyDependency myDependency)
{
_myDependency = myDependency;
}
}
Lưu ý, tuy nhiên, điều này giả định cách tiếp cận "xem mô hình đầu tiên" với MVVM.
Trong WPF nó thường khá dễ dàng và nó không thực sự phụ thuộc vào bất kỳ DI Container cụ thể. Bạn đã đọc Josh Smith's article on MVVM chưa? Nó mô tả khá nhiều cách thiết lập một hệ thống phân cấp của ViewModels.
Những gì nó không đi sâu vào nhiều là làm thế nào để tạo ra những ViewModels từ phụ thuộc (chẳng hạn như kho), nhưng nó không phải là một ngoại suy khó khăn để làm.
Tôi thường có kinh nghiệm sử dụng tự do các Nhà máy Tóm tắt giúp khá nhiều về vấn đề này. Thay vì trực tiếp new'ing up ViewModels tôi cho một nhà máy tiêm làm điều đó cho tôi.
Bạn có thể sử dụng DI của người nghèo hoặc bất kỳ loại DI Container nào để kết nối các Nhà máy như vậy cho bạn.
Chắc chắn tôi đã đọc bài báo, nhưng nó không ' t đi vào chi tiết về việc tạo và duy trì một bộ lớn hơn của ViewModels với một số phụ thuộc trong mỗi một. Tôi sợ câu trả lời của bạn không hữu ích đối với tôi ( –
@Yacoder: Bạn sẽ ngạc nhiên khi có bao nhiêu người sử dụng thuật ngữ MVVM ở đây trên StackOverflow mà không cần đọc bài báo. –
Thx cho con trỏ, đó là một bài viết tuyệt vời. – Mathias
Tôi đã xuất bản this article on Code Project về cách tạo ứng dụng WPF có thể mở rộng bằng MVVM và MEF để mở rộng. Tuy nhiên, nếu bạn nhìn kỹ, tôi cũng sử dụng MEF cho DI.
Ứng dụng này hoàn toàn là MVVM và chỉ sử dụng DataTemplates (và Cửa sổ không thường xuyên) cho Chế độ xem, giống như trong bài viết của Josh Smith. WPF quan tâm đến việc áp dụng Chế độ xem chính xác cho ViewModel phù hợp cho bạn. Thật ngọt ngào.
Nó sử dụng MEF để các phần có thể "tìm thấy" lẫn nhau. Vì vậy, ViewModel cho mục menu "View" tìm thấy tất cả các mục menu được cho là trong menu phụ sử dụng các điểm mở rộng, và ViewModels cho mỗi "tìm" "ViewModel" mà chúng được cho là sẽ giao cho trình quản lý bố cục bằng cách sử dụng điểm thành phần. Họ cũng "tìm" dịch vụ quản lý bố cục bằng cách sử dụng một bộ định vị dịch vụ thô sơ (MEF). Ví dụ menu View là gần như chính xác những gì bạn đang nói về với ViewModels lồng nhau. Điều thú vị là họ thậm chí không biết về nhau cho đến khi thời gian chạy.
- 1. Android và Dependency Injection
- 2. ASMX Dependency Injection và IoC
- 3. Groovy Dependency Injection
- 4. Khi nào sử dụng Dependency Injection
- 5. Làm thế nào để giữ một thể hiện của một Container Dependency Injection (PHP)
- 6. Làm thế nào tôi có thể sử dụng "Dependency Injection" trong các hàm php đơn giản, và tôi có nên bận tâm không?
- 7. Injection Dependency Spring và Plugin Jar
- 8. WPF Converters có thể được sử dụng như thế nào trong một mẫu MVVM?
- 9. Dependency Injection và phát triển năng suất
- 10. ASP.NET MVC: HTTPContext và Dependency Injection
- 11. Spring- Làm thế nào để sử dụng Spring Dependency Injection để viết một ứng dụng Java độc lập
- 12. Hiểu IoC Container và Dependency Injection
- 13. Tạo một AntiForgeryToken thông qua Dependency Injection
- 14. Dependency Injection wcf
- 15. Tùy chỉnh ResourceProviderFactory Dependency Injection
- 16. Dependency Injection bên trong Excel VSTO và Ninject.Extensions.Factory
- 17. Sử dụng mô hình Hibernate 4 của tích hợp và dependency injection Spring
- 18. Automapper cùng với Dependency Injection
- 19. Sử dụng Reader Monad for Dependency Injection
- 20. Làm thế nào để sử dụng Dependency Injection với ASP.NET Web Forms
- 21. Làm thế nào tôi có thể tích hợp Oracle BI vào một ứng dụng hiện có?
- 22. Dependency Injection Container vs Mẫu đăng ký
- 23. Symfony 2 Dependency Injection & autowiring
- 24. Dependency Injection & sử dụng giao diện?
- 25. Dependency Injection container - Factory Pattern
- 26. Thực hành Singleton & Dependency Injection question
- 27. Tiêm Khẩu phụ thuộc bằng cách sử dụng Injection Dependency
- 28. Constructor Dependency Injection trong một điều khiển ASP.NET MVC
- 29. toàn cầu Nhà nước và Singletons Dependency Injection
- 30. Dependency Injection Thực hành tốt nhất
Tôi phải nói rằng tôi không phải là một fan hâm mộ lớn của 'hoạt động' ViewModels ... Thật khó để đưa ra một đối số một câu hợp lý cho điều này, nhưng tôi nghĩ rằng tôi đang ở trong 'ViewModels nên thụ động 'camp ... –
Ý của bạn là gì bởi Mô hình Xem' hoạt động '/' thụ động ', Đánh dấu? –
@Yacoder: Ví dụ của Kent Boogaart là một ViewModel 'hoạt động' vì nó cần một sự phụ thuộc, và người ta phải cho rằng nó có ý định sử dụng sự phụ thuộc đó một cách tích cực. Một ViewModel 'thụ động', mặt khác, là một trong những bạn tạo và điền dữ liệu, và một khi bạn đã làm điều đó, nó là khép kín. –