2011-02-09 8 views
21

Co Używam:PRISM + MEF + MVVM - Nie wiesz, od czego zacząć?

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

Co Próbuję dowiedzieć się, jak zacząć z Prism + MEF przy zachowaniu wzorca MVVM. Kiedy wchodzę do Prism Quickstarts, ma on Prism + MEF, ale komentarze w projekcie wyraźnie stwierdzają, że przykład Quickstart nie implementuje MVVM. Nie jestem do końca pewien, co miksować/dopasowywać, aby moja powłoka podążała za MVVM (i regionami).

Zasadniczo chcę użyć MEF, aby móc ładować Złożenia (moduły) w czasie wykonywania. I chcę skonfigurować regiony w mojej powłoce i sprawić, aby Shell używał MVVM (aby móc przypisać dane do powłoki). Każdy przykład online to Prism, Prism + MVVM, Prism + Unity, przykłady Silverlight, Prism + MEF, itp. Ale nie mogę znaleźć żadnych przykładów lub informacji WPF Prism + MEF + MVVM. Naprawdę nie mam pojęcia, jak skonfigurować moje ładowanie i takie, aby zacząć.

Po wykonaniu tej części, jestem pewien, że wymyślę sposób załadowania innych kontrolek przy użyciu MVVM do mojej powłoki. Jakakolwiek pomoc byłaby świetna, zwłaszcza zasoby, które zajmują się bezpośrednio tą sytuacją w sposób podobny do podobnego (tj. Prism + Unity i bez MEF). Dzięki!

+0

Czy kiedykolwiek znalazłeś przykład MEF + Prism + MVVM? Nie mogę znaleźć ani jednego, a przykład jest wart tysiąca linków do plików pomocy. – JohnC

+0

@JohnC: Poradnik programisty na temat Prism był pomocny, ale nie, nie znalazłem żadnych konkretnych przykładów Prism + MEF + MVVM. Chociaż, patrząc na każdy komponent indywidualnie, rzeczy miały więcej sensu. Prism to framework oferujący narzędzia i klasy, które pomagają w pisaniu aplikacji MVVM. MEF jest strukturą wtyczek. Powodem, dla którego Prism i MEF mogą się ze sobą łączyć, jest to, że pryzmat można rozszerzyć. Nie wiedziałem, jak obsługiwać regiony (używając MEF), ale odkryłem, że AggregateCatalog jest sercem i duszą Prism + MEF. – michael

+0

@JohnC: MVVM to styl projektowania, który naturalnie pasuje do Prism. Chodzi o to, że Prism daje sporo narzędzi, które pomagają radzić sobie ze specjalnymi sytuacjami MVVM (na przykład dostarcza DelagateCommand i ma próbki, jak stworzyć CompositeCommand). Oferuje Regiony (których wciąż jeszcze nie znałem). Oferuje klasy takie jak NotificationObject, itp. Znalazłem sposób użycia MEF do zaimportowania mojego ViewModelu do mojego widoku i eksportu mojego widoku do mojego Bootstrappera. Istnieje wiele źródeł, po prostu nie jeden DUŻY przykład, zamiast wielu małych przykładów, które poskładałem razem. – michael

Odpowiedz

1

Ja sam nigdy nie używałam Prism + MEF, ale w swoim pytaniu wspomniałeś, że chcesz móc ładować moduły w czasie wykonywania (przy MEF). To jest coś, do czego nie potrzebujesz mieć MEF, ponieważ Prism jest całkiem dobry w robieniu tego samego. Konfiguracja jest dość prosta:

Najpierw utwórz moduł Prism, wprowadzając Modularity.IModule. Wymaga tylko jednej metody: Initialize(). Tutaj możesz wykonać dowolną konfigurację modułu. Generalnie rozszerzam również konstruktor, aby wstrzykiwać dowolne inne interfejsy, których potrzebuję (używając Unity).

Następnie utwórz ModuleCatalog aby określić szczegóły utworzonego modułu:

<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> 

InitializationMode co chcesz ustawić, jeśli potrzebujesz wykonania załadunku. Katalog może być ładowany w Prim inicjującego:

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

Wtedy wszystko, co trzeba zrobić, aby załadować moduł jest uzyskać odniesienie do IModuleManager i załadować modułu (Dependency Injection, yay!):

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

Teraz moduł jest znany pryzmatowi. Pamiętaj, że rozładowanie nie jest obsługiwane przez Prism.

1

Wszystko, o co prosiłeś, wydaje się być obecne na próbkach, które są instalowane z Prismem, po prostu spojrzałeś na te złe.

Sprawdź folder StockTrader RI, czyli described here.

Ma dość kompletną próbkę do rzeczywistych zastosowań, z niektórymi złożonymi scenariuszami i jest realizowany z Prism (oczywiście), MVVM i MEF.

Edytuj: Mimo że łącze, które podałem dla Prism 5, próba była również obecna na Prism 4.1. W tej wersji dokumentacja nie była dostępna online (przynajmniej tak daleko, jak pamiętam), ale zamiast tego była oferowana na pliku .chm zainstalowanym z kodem źródłowym Prism + sample. Nie wiem jednak o wersji 4.0.

Powiązane problemy