Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Podobne dokumenty
Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

Przewodnik krok po kroku:

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Podstawy programowania obiektowego

Programowanie obiektowe i zdarzeniowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Języki programowania imperatywnego

Programowanie obiektowe

Metodyki zwinne wytwarzania oprogramowania

Wykład 5 Okna MDI i SDI, dziedziczenie

Klasy cd. Struktury Interfejsy Wyjątki

Programowanie obiektowe

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Programowanie w technologii.net wykład 4 Aplikacja i okna

Programowanie obiektowe

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Programowanie obiektowe

MVVM Light Toolkit Przewodnik krok po kroku

Fragmenty są wspierane od Androida 1.6

Polimorfizm. dr Jarosław Skaruz

Klasy abstrakcyjne i interfejsy

Dziedziczenie. dr Jarosław Skaruz

Lista dwukierunkowa - przykład implementacji destruktorów

Dawid Gierszewski Adam Hanasko

Aplikacje w środowisku Java

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Kontenery IoC dla Java Guice 3.0

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Podstawy programowania obiektowego

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

TEMAT : KLASY DZIEDZICZENIE

Podstawy programowania obiektowego

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe

Systemy wirtualnej rzeczywistości. Komponenty i serwisy


Obsługa SMS i telefonii

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Zastosowanie słuchaczy zdarzeń wg

Klasy i obiekty cz II

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

7. Tworzenie interfejsu użytkownika w WPF użyciem PRISM 5.0

Programowanie w Javie wykład 8 Interfejsy

Programowanie w środowiskach graficznych. Wykład 3 Język C#

POLITECHNIKA POZNAŃSKA. Oprogramowanie dla telefonów z systemem Windows Phone 8 obsługujących technologię NFC do sprawdzania listy obecności.

Wzorce logiki dziedziny

Abstract Factory (fabryka abstrakcyjna)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Programowanie obiektowe

Programowanie obiektowe

Programowanie telefonów z Windows Phone 7, cz. 2

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Architektury Usług Internetowych. Laboratorium 5

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Aplikacje WWW - laboratorium

KOTLIN. Język programowania dla Androida

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe w języku

[Android] Podstawy programowania

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Przypomnienie o klasach i obiektach

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Metodyki zwinne wytwarzania oprogramowania

STWORZENIE PRZYKŁADOWEJ

Android pierwsza aplikacja

Instrukcja laboratoryjna cz.3

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

MVC w praktyce tworzymy system artykułów. cz. 1

Enkapsulacja, dziedziczenie, polimorfizm

Systemy Rozproszone - Ćwiczenie 6

Klasa bazowa i klasy potomne - doskonalenie umiejtnoci projektowania i wykorzystania klas (45 min)

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Algorytmy i Struktury Danych. Anna Paszyńska

Systemy operacyjne na platformach mobilnych

Wykład 7: Pakiety i Interfejsy

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Programowanie Obiektowe Ćwiczenie 4

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

Przetwarzanie Zespołowe

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Transkrypt:

Logger Na początku stworzymy własny logger. Do tego calu trzeba utworzyć klasę naszego loggera, która będzie implementować interfejs ILoggerFacade. Oto kod tej klasy: public class SimpleLogger: ILoggerFacade public void Log(string message, Category category, Priority priority) switch (category) case Category.Debug: Debug.Write("Debug:" + message); case Category.Warn: Debug.Write("Warn:" + message); case Category.Exception: Debug.Write("Exception:" + message); case Category.Info: Debug.Write("Info:" + message); Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger: protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger() return new SimpleLogger(); W ten sposób możemy dołączyć do aplikacji dowolny logger, np. Log4Net. Do naszego loggera można dostać się bezpośrednio z IoC container, albo użyć ServiceLocator. Przykład użycia ServiceLocator: var logger = (SimpleLogger)ServiceLocator.Current.GetInstance(typeof(ILoggerFacade)); logger.log("inicjalizacja aplikacji zakończona", Category.Info, Priority.None);

Rozszeżanie Nawigacji W Prim mamy możliwość także rozszerzyć nawigację. Zobaczmy to na przykładzie w którym po przejściu do modułu A otwiera się moduł B, a po przejściu do B otwiera się moduł A. Tworzymy klasę która dziedziczy po klasie RegionNavigationContentLoader. Nadpisujemy metodę GetContractFromNavigationContext. internal class ViewModelContentLoader : RegionNavigationContentLoader private IServiceLocator servicelocator; public ViewModelContentLoader(IServiceLocator servicelocator) :base(servicelocator) protected override string GetContractFromNavigationContext(NavigationContext navigationcontext) string contract = base.getcontractfromnavigationcontext(navigationcontext); if (contract.equals("modulebview", StringComparison.OrdinalIgnoreCase)) return typeof(modulea.moduleaview).name; if (contract.equals("moduleaview", StringComparison.OrdinalIgnoreCase)) return typeof(moduleb.modulebview).name; return contract; Naszą metodę możemy zarejestrować w Bootstraperze w taki sposób: protected override void InitializeShell() this.container.registerinstance<iregionnavigationcontentloader>(new ViewModelContentLoader(this.Container.Resolve<IServiceLocator>())); //...

Adapter W Prism mamy dostępnych kilka adapterów regionów "od ręki" - pozostałe musimy sami stworzyć. <Window x:class="wpfapplication1.shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="clrnamespace:microsoft.practices.prism.regions;assembly=microsoft.practices.prism" Title="Shell" Height="300" Width="300"> <Grid> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal" prism:regionmanager.regionname="navigationregion" /> <ContentControl prism:regionmanager.regionname="contentregion" /> </StackPanel> </Grid> </Window> W jakich sytuacjach może zajść konieczność stworzenia własnego adaptera regionów? Jeżeli chcemy użyć jakiejś kontrolki jako miejsca w które Prism będzie ładował widoki, a obecnie nie ma takiej obsługi w prosty sposób możemy taką obsługę dodać. Zobaczmy na przykład:uruchomienie aplikacji spowoduje błąd. W wolnym tłumaczeniu wyjątek oznacza iż dana kontrolka nie obsługuje regionów. Tak więc nie pozostaje nam nic innego jak dodać do kontrolki obsługę regionów. Dodanie obsługi danego regionu składa się z 4 kroków: Tworzymy klasę dziedziczącą po RegionAdapterBase<T> Implementujemy metodę CreateRegion która zwraca jeden z trzech wyników determinujących zachowania regionu: SingleActiveRegion - jeden aktywny region w danym momencie (ContentControl) AllActiveRegion - wszystkie regiony aktywne (ItemsControls) Region - wiele aktywnych regionów (SelectorControls) Implementacja metody Adapt Rejestracja stworzonego adaptera w Bootstrapperze

Żeby lepiej zobrazować powyższe kroki przejdziemy je podczas implementowania obsługi regionów w kontrolce StackPanel. 1. Klasa dziedzicząca po klasie RegionAdapterBase<T> : public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel> protected override void Adapt(IRegion region, StackPanel regiontarget) throw new SystemNotImplementedException(); protected override IRegion CreateRegion() throw new SystemNotImplementedException(); 2. Metoda Adapt: protected override void Adapt(IRegion region, StackPanel regiontarget) region.views.collectionchanged += (s, e) => if (e.action == NotifyCollectionChangedAction.Add) foreach (FrameworkElement item in e.newitems) regiontarget.children.add(item); else if (e.action == NotifyCollectionChangedAction.Remove) foreach (FrameworkElement item in e.newitems) if (regiontarget.children.contains(item)) regiontarget.children.remove(item); ; Tak więc w metodzie tej nasłuchujemy zdarzenia zmiany kolekcji. Na podstawie typu zdarzenia odpowiednio reagujemy w przypadku dodawania nowego elementu - dodajemy go do naszego StackPanel-u za pomocą właściwości Children w przypadku usuwania - usuwamy odpowiedni element ze StackPanel-u. 3. Metoda CreateRegion:

protected override IRegion CreateRegion() return new AllActiveRegion(); Zwracamy informację że wszystkie elementy dodane do naszego StackPanel-a będą domyślne aktywne. 4. Dodanie konstruktora do tworzonej klasy StackPanelRegionAdapter Nasza klasa wymaga jeszcze konstruktora - dodajemy go więc. public StackPanelRegionAdapter(IRegionBehaviorFactory regionbehaviorfactory) : base(regionbehaviorfactory) Tak więc pierwsza część za nami zostało tylko zarejestrowanie naszego adaptera w Bootstrapperze co przedstawia się następująco: protected override RegionAdapterMappings ConfigureRegionAdapterMappings() RegionAdapterMappings mappings = base.configureregionadaptermappings(); mappings.registermapping(typeof(stackpanel), Container.Resolve<StackPanelRegionAdapter>()); return mappings; Za pomocą metody ConfigureRegionAdapterMappings dodajemy informację o naszym Adapterze StackPanel.