2011-02-09 70 views
21

Những gì tôi đang sử dụng:PRISM + MEF + MVVM - Bạn không chắc chắn nên bắt đầu từ đâu?

  • Visual Studio 2010
  • Microsoft .NET Framework 4
  • Prism v4

Những gì tôi đang cố gắng tìm ra là làm thế nào để bắt đầu với Prism + MEF trong khi vẫn duy trì mẫu MVVM. Khi tôi đi vào Prism Quickstarts, nó có một Prism + MEF, nhưng các chú thích trong dự án chỉ rõ rằng ví dụ Quickstart không thực hiện MVVM. Tôi không thực sự chắc chắn những gì để trộn/kết hợp để vỏ của tôi chính nó sau MVVM (và khu vực).

Về cơ bản, tôi muốn sử dụng MEF để có thể tải Tập hợp (Mô-đun) tại thời gian chạy. Và, tôi muốn thiết lập các khu vực trong Shell của tôi và có Shell sử dụng MVVM (vì vậy tôi có thể databind những thứ để vỏ). Mỗi ví dụ trực tuyến là Prism, Prism + MVVM, Prism + Unity, Silverlight ví dụ, Prism + MEF, vv Nhưng tôi không thể tìm thấy bất kỳ WPF Prism + MEF + MVVM ví dụ hoặc thông tin. Tôi thực sự không có ý tưởng làm thế nào để thiết lập bootstrapping của tôi và như vậy để có được đi.

Khi phần đó được thực hiện, tôi chắc chắn tôi sẽ tìm cách tải các điều khiển khác bằng cách sử dụng MVVM vào trình bao của tôi. Bất kỳ sự trợ giúp nào sẽ là tuyệt vời, đặc biệt là các nguồn lực giải quyết trực tiếp với tình huống này như được áp dụng cho một cái gì đó tương tự (tức là Prism + Unity và không có MEF). Cảm ơn!

+0

Bạn đã bao giờ tìm thấy ví dụ về MEF + Prism + MVVM chưa? Tôi không thể tìm thấy một trong hai và một ví dụ có giá trị một ngàn liên kết tập tin trợ giúp. – JohnC

+0

@JohnC: Vâng, Hướng dẫn của nhà phát triển về lăng kính là hữu ích, nhưng không, tôi không tìm thấy bất kỳ ví dụ cụ thể nào về Prism + MEF + MVVM. Mặc dù, nhìn vào từng thành phần riêng lẻ mọi thứ có ý nghĩa hơn. Prism là một khung công tác cung cấp các tiện ích và các lớp giúp bạn viết một ứng dụng MVVM. MEF là một khung trình cắm thêm. Lý do tại sao Prism và MEF có thể đan xen là vì Prism có thể mở rộng. Tôi đã không tìm ra cách để xử lý các khu vực (sử dụng MEF), nhưng tôi đã phát hiện ra rằng AggregateCatalog là trái tim và linh hồn của Prism + MEF. – michael

+0

@JohnC: MVVM là một phong cách thiết kế, và nó tự nhiên đi với Prism. Vấn đề là Prism cung cấp cho khá một vài công cụ để giúp xử lý các tình huống MVVM đặc biệt (ví dụ, nó cung cấp DelagateCommand và có các mẫu về cách tạo một CompositeCommand). Nó cung cấp Vùng (mà tôi vẫn chưa tìm ra hoàn toàn). Nó cung cấp các lớp như NotificationObject, vv Tôi đã tìm cách sử dụng MEF để nhập ViewModel của tôi vào khung nhìn của tôi và xuất View của tôi vào Bootstrapper của tôi. Có khá nhiều nguồn trên mạng, không chỉ là một ví dụ lớn, thay vào đó là rất nhiều ví dụ nhỏ mà tôi đã ghép lại với nhau. – michael

Trả lời

1

Tôi chưa bao giờ sử dụng Prism + MEF, nhưng trong câu hỏi của bạn, bạn đề cập đến bạn muốn có thể tải các mô-đun trong thời gian chạy (với MEF). Đây là một cái gì đó bạn không cần phải có MEF cho, bởi vì Prism là khá tốt lúc làm điều đó chính nó. Quá trình thiết lập khá đơn giản:

Đầu tiên, tạo mô-đun Prism bằng cách triển khai Modularity.IModule. Nó chỉ yêu cầu một phương thức: Initialize(). Ở đây bạn có thể thực hiện bất kỳ thiết lập nào cần thiết cho mô-đun của bạn. Tôi thường cũng mở rộng các nhà xây dựng để tiêm bất kỳ giao diện khác tôi có thể cần (bằng cách sử dụng Unity).

Sau đó, tạo một ModuleCatalog để xác định các chi tiết của các mô-đun mà bạn đã tạo:

<Modularity:ModuleCatalog 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition"> 
    <Modularity:ModuleInfo Ref="Your.ModuleProject.dll" 
     ModuleType="Your.ModuleProject.Module, Your.ModuleProject" 
     ModuleName="Module1" 
     InitializationMode="OnDemand" /> 
</Modularity> 

Các InitializationMode là những gì bạn muốn thiết lập nếu bạn cần tải chạy. Các cửa hàng có thể được nạp trong bootstrapper Prim:

catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute)); 

Sau đó, tất cả các bạn cần phải làm gì để tải lên mô-đun của bạn, là có được một tài liệu tham khảo để IModuleManager và tải lên các mô-đun (Dependency Injection, yay!):

if (loadModule1) 
    var myModule = moduleManager.LoadModule("Module1"); 

Bây giờ, mô-đun này được gọi là lăng kính. Hãy nhớ rằng việc dỡ hàng không được Prism hỗ trợ.

1

Mọi thứ bạn hỏi dường như có mặt trên các mẫu được cài đặt với Prism, bạn chỉ cần nhìn vào những mẫu sai.

Kiểm tra thư mục StockTrader RI, đó là described here.

Nó có một mẫu khá hoàn chỉnh cho các ứng dụng thực tế, với một số kịch bản phức tạp và được thực hiện với Prism (rõ ràng), MVVM và MEF.

Chỉnh sửa: Mặc dù liên kết tôi cung cấp là dành cho Prism 5, mẫu cũng có trên Prism 4.1. Trong phiên bản đó, tài liệu không có sẵn trực tuyến (ít nhất là theo tôi nhớ), nhưng thay vào đó được cung cấp trên một tệp .chm được cài đặt với mã nguồn Prism + mẫu. Tuy nhiên, không biết về v4.0.

Các vấn đề liên quan