sobota, 12 listopada 2011

Prism stworzenie architektury aplikacji

W tym artykule pokażę w praktyce jak stworzyć prosty WPF-owy program oparty o Prism.

Standardowo tworzenie aplikacji przy użyciu wzorca Prism przedstawia się następująco:


Jak widać kroki jakie należy podjąć przedstawiają się następująco:
1. Stworzenie modułu Shella, odpowiedzialnego za wizualną reprezentację aplikacji, zdefiniowanie regionów itp.
2. Stworzenie Bootstrappera odpowiedzialnego za inicjację oprogramowania.
3. Stworzenie modułu/ów odpowiedzialnych za poszczególne części (funkcjonalności) składowe tworzonego systemu

1. Tworzenie Shella
Rozpoczniemy od utworzenia Shella. W tym celu tworzymy nowy projekt WPF w Visual Studio 2010. Następnie:
- usuwamy domyślne okno MainWindow.xaml
- z pliku App.xaml usuwamy zapis: StartupUri="MainWindow.xaml"
- dodajemy nowe okno o nazwie Shell
- dodajemy referencje do DLL podanych w pierwszym artykule o Prism
Finalny ekran będzie wyglądać następująco:


2. Bootstrapper
Bootstrapper pełni rolę kleju w naszej aplikacji. Odpowiada za inicjalizację głównego okna, rejestrację modułów, inicjalizację kontenera DI.
W projekcie więc tworzymy nową klasę o nazwie Bootstrapper. Klasa ta dziedziczy po klasie UnityBootstrapper. Na wstępie musimy zaimplementować metodę CreateShell():


Code:
        protected override System.Windows.DependencyObject CreateShell()
        {
            return ServiceLocator.Current.GetInstance<Shell>();
        }

Następnie w metodzie InitializeShell wskażemy nasz Shell jako startowe okno aplikacji:


Code:
        protected override void InitializeShell()
        {
            Application.Current.MainWindow = (Shell)Shell;
            Application.Current.MainWindow.Show();
        }

Cała klasa na obecny moment wygląda następująco:

Code:
    public class Bootstrapper : UnityBootstrapper
    {
        protected override System.Windows.DependencyObject CreateShell()
        {
            return ServiceLocator.Current.GetInstance<Shell>();
        }

        protected override void InitializeShell()
        {
            Application.Current.MainWindow = (Shell)Shell;
            Application.Current.MainWindow.Show();
        }
    }

Podczas inicjalizacji Bootstrappera zostają zarejestrowane podstawowe usługi (serwisy) które następnie mogą zostać wykorzystane przy budowie naszych modułów. Usługi z których możemy skorzystać to:
IModuleManager - zwraca interfejs wykorzystywany do inicjalizacji i zwracania modułów
IModuleCatalog - metadane o modułach w aplikacji
IModuleInitializer - inicjuje moduły
IRegionManager - rejestruje regiony, wykorzystywane przy wizualnej reprezentacji naszej aplikacji
IEventAggregator - reprezentuje kolekcję zdarzeń które są luźno powiązane pomiędzy subskrybującymi i oferującymi usługi.
ILoggerFacade - mechanizm logowania zdarzeń występujących w naszej aplikacji
IServiceLocator - pozwala na dostanie się do kontenera tworzonego w Prism.

W tym momencie uruchomienie aplikacji nie spowoduje jeszcze wyświetlenia okienka aplikacji. Naszego Bootstrappera wszak musi coś uruchomić.

W pliku App.cs dokładamy następujący kod:


Code:
using System.Windows;

namespace WpfApplication11
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            var bootstrapper = new Bootstrapper();
            bootstrapper.Run();
        }
    }
}

Po skompilowaniu i uruchomieniu aplikacji możemy zobaczyć - póki co - puste okienko naszej aplikacji.
W następnym artykule pokaże w jaki sposób można coś załadować do tak stworzonego okienka.

2 komentarze:

  1. Czym się tak naprawdę różni się forma zapisu a i b

    var rightView = this.unityContainer.Resolve();
    a) this.regionManager.Regions[Regiony.RightRegion].Add(rightView);
    b) this.regionManager.RegisterViewWithRegion(Regiony.RightRegion, typeof(ViewProdukt));

    OdpowiedzUsuń
  2. a) widok zostanie dodany do regionu ale nie aktywowany
    b) widok zostanie dodany do regionu i aktywowany

    OdpowiedzUsuń