Krzysztof Manuszewski

Slides:



Advertisements
Podobne prezentacje
Usługi sieciowe Wykład 9 VPN
Advertisements


Java Server Faces Tomasz Nowak.
ALLEGRO PIERWSZA GRA: WYŚCIG
C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
Java vs C# Michał Prządka Tomasz Nowak
OOPC++ - operatory1 Operatory class complex { private: double re, im; public: complex (double r, double i = 0) { re = r; im = i; } friend complex operator+
PRZYPOMNIENIE!!!!!! Używamy mówiąc o warunku i skutkach jego spełnienia, które są zawsze prawdziwe If + Present Simple,+ Present Simple lub czasownik.
GUI Struktury Spotkanie integracyjne Nazwa wydziału: EAIiE Nazwa katedry: Informatyka Miejsce i data prezentacji: Kraków,
Router(config)# access-list 1 permit ale można również: Router(config)# access-list 1 permit any.
Testowanie oprogramowania metodą badania pokrycia kodu
.NET Remoting Łukasz Zawadzki.
Łukasz Monkiewicz.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Aplikacje sieciowe Obiekty typu Socket. ServerSocket ClientSocket Socket ClientSocket Socket.
„Tworzenie aplikacji sieciowych w języku Java”
Projektowanie warstwy serwera Spring MVC - uzupełnienie.
Język C# Copyright, 2004 © Adam Czajka.
Przestrzeń System podstawowe klasy i klasy bazowe.
Tadeusz Janasiewicz IT Group, Tadeusz Janasiewicz, WSUS, IT Group, r.
Realizacja aplikacji internetowych
Dr inż. Piotr Czapiewski. Overloading Znaczenie inne niż w większości języków obiektowych Metoda dynamicznego tworzenia pól i metod Magiczne metody.
PRZELICZNIK DŁUGOŚCI w programie NetBeans IDE autorzy: Michał Mrozek i Marcin Mrugała 2012.
db4o Kacper Skory Marcin Talarek
PROPOZYCJE ZAPISU Autorzy: Uczniowie należący do Samorządu Szkolnego.
Krótka prezentacja na temat przemocy i pornografii
ZASADY BEZPIECZEŃSTWA W INTERNECIE
FUNKCJA L I N I O W A Autorzy: Jolanta Kaczka Magdalena Wierdak
WATA - Światowe Stowarzyszenie Agencji Podróży
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
PIO. Autor -Zofia Kruczkiewicz1 Wykład 1-część druga Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowania (część biznesowa aplikacji) iteracyjno-rozwojowy.
PREZENTACJA WYKORZYSTANA PODCZAS DEBATY W SALI PATRONA SZKOŁY.
Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12,
Prezentacja z przedmiotu „systemy wizyjne”
TWORZYMY SPOŁECZEŃSTWO OTWARTE DLA KAŻDEGO
ALGORYTMY.
Zend Framework Framework php Antonczak Lukasz. Dlaczego Zend Framework Zend Framework jest frameworkiem dla PHP5 rozwijanym przez społeczność użytkowników.
ALGORYTM.
Towaroznawstwo i Zarządzanie Jakością Absolwenci specjalności są specjalistami w zakresie kształtowania, oceny i ochrony jakości produktów i usług. W trakcie.
Automatyczne wyznaczanie złożoności obliczeniowej algorytmów
Adam Suwała DIY - DI.
Cz.8 Zdarzenia. Refleksja – przypomnienie Event Programowanie zdarzeniowe Do dzieła!
Marek Krupa Coś o mnie.
Automatyzacja testów akceptacyjnych
System gospodarki rynkowej
xHTML jako rozszerzenie HTML
Instalacja serwera WWW na komputerze lokalnym
HTML Podstawy języka hipertekstowego Damian Urbańczyk.
W naszej klasie jest 7 dziewczynek i 9 chłopców. Lubimy się wspólnie uczyć, bawić i chodzić na wycieczki. A oto kilka zdjęć z życia naszej klasy w tym.
Polskie cyfrowe miasto ? Marzenia a rzeczywistość. Maxymilian Bylicki - Zakopane, Polskie cyfrowe miasto - marzenia a rzeczywistość Maxymilian.
Bazy danych w systemie SimCallCenter Krótkie omówienie wyboru baz danych stosowanych w CallCenter, integracja z zewnętrznymi bazami danych Czas 15 min.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Warsztaty C# Część 3 Grzegorz Piotrowski Grupa.NET PO
KINECT – czyli z czym to się je?. Damian Zawada
1 Strategia dziel i zwyciężaj Wiele ważnych algorytmów ma strukturą rekurencyjną. W celu rozwiązania rozwiązania problemu algorytm wywołuje sam siebie.
To popularny portal internetowe. Pisząc blog informujemy internautów o swoich zainteresowaniach np. o modzie lub gotowaniu. Niestety czasem zapominamy.
Zmiany w Przepisach Gry w Piłkę Nożną od 1 września 2006r. Kolegium Sędziów Warmińsko-Mazurskiego Związku Piłki Nożnej.
Informacje podstawowe
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 4.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3.
Matmatura 2013; 2014; 2015; 2016; 2017…. p. Katarzyna Misztal z uczniami klasy 2F: Monika Tobera Milena Ściana Radosław Stochmal KTO?
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Korzyści dla MSP ze współpracy z ISW. MSP współpracujące z ISW Przegląd korzyści Korzyści Dostęp do ekspertyz Rozwiązywanie problemów Badania Specjalistyczne.
Rozdział 3: Bezpieczeństwo w sieci opartej na systemie Windows 2000.
Silverlight 4 dla Windows Phone 7
1.
Department | 1/11/2013 | © Robert Bosch GmbH All rights reserved, also regarding any disposal, exploitation, reproduction, editing, distribution,
Piotr Czapiewski Wydział Informatyki ZUT.  Extensible Markup Language  Język znaczników  Human-readable and machine-readable  Niezależny od platformy.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Zapis prezentacji:

Krzysztof Manuszewski ZTO DI Krzysztof Manuszewski

Kontenery DI

Kod prehistoryczny Ograniczenia: Żeby zmienić klasy usług lub zmodyfikować zależności należy zmienić kod klasy zależnej Konkretna implementacja klas usługowych musi być dostępna w czasie kompilacji Testowanie (jednostkowe?) klas jest trudne z powodu konieczności uwazględniania pot. Skomplikowanego zachowania klas usługowych Klasy zawierają zduplikowany kod do tworzenia i zarzadzania serwisami.

DI: Wstrzykiwanie zależności - budowniczy

DI przypadek użycia public interface IService { } public class Application { private readonly IService service; public Application(IService service) { this.service = service; } } public class ServiceImpl : IService { } Application a = new Application(new ServiceImpl()); //Co z ew. parametrami ServiceImpl ?

IoC – z kontenerem DI IUnityContainer container = new UnityContainer(); //configuration UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); section.Containers.Default.Configure(container); … Application application = container.Resolve<Application>();

IoC - Przegląd rozwiązań Castle Unity Ninject Autofac StructureMap Spring.Net

DIC - Możliwości i różnice: Różne modele życia obiektów Automatyczna rejestracja klas/obiektów (np przez refleksję) Konfiguracja xml/programowa/skryptowa Introspekcja Kaskadowe rozwiązywanie zależności Wstrzykiwanie zależności przez konstruktor/właściwości Komunikowanie błedów (np zależności rekursywne, brak rozwiązania dla typu) Obsługa niezwiązanych generyków, list obiektów

Service Locator

ServiceLocator UnityContainer container= new UnityContainer() ServiceLocator.SetLocatorProvider( () => new UnityServiceLocator(container) ); // container configuration container.configure….. ServiceLocator.Current.GetInstance<ILoger>() ServiceLocator.Current.GetInstance<IPresenter>("simple")

Życie jest skomplikowane... ServiceLocator UNITY Adapter GetInstance Moduł A Moduł C Moduł B Konfiguracja

Unity Wstrzykiwanie zależności: Konfiguracja konstruktor właściwości metody Konfiguracja Atrybuty XML config Programowa Auto Registration Cykliczne referencje są raportowane jako Stack overflow ...

Prosty kod public interface IService { … }; public interface ILogger { … }; public class ConsoleLogger{ public ConsoleLogger() { … } } public class SimpleService { public SimpleService(ILogger logger) { … } public class Application { public Application(ILogger logger, IService service) { … }

Unity – konfiguracja programowa using (IUnityContainer container = new UnityContainer()) { container.RegisterType< IService, ServiceImpl>() .RegisterInstance< ILogger >(new ConsoleLogger ()); Application application = container.Resolve<Application>(); ILogger loggerInstance = container.Resolve<ILogger>(); }

Unity – konfiguracja xml using (IUnityContainer container = new UnityContainer()) { UnityConfigurationSection config = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); if (config != null) config.Containers.Default.Configure(container); Application application = container.Resolve<Application>(); }

Unity – XML elementy konfiguracji <unity> <typeAliases> <typeAlias alias="string" type="System.String, mscorlib" /> alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </typeAliases> <containers> <container> <types> …. </types> </container> </containers> </unity> Aliases are not obligatory <type type="ILogger“ mapTo="ConsoleLogger”> <lifetime type="singleton"/> </type> <type type="IService“ mapTo="SimpleService"/> Mappings

Unity – wielokrotne konstruktory public class SimpleService : IService { public SimpleService(ILogger logger) { … } public SimpleService(String logFile) { … } } Unity domyślnie wybiera konstruktor z największa liczbą parametrów Jeżeli jest takich kilka rzucany jest wyjatek Jak określić który konstruktor ma być wybierany?

Unity – wybór konstruktora public class SimpleService : IService { [InjectionConstructor] public SimpleService(ILogger logger) { … } public SimpleService(String logFile) { … } } 1 2 container. RegisterType< IService, ServiceImpl>( new InjectionConstructor(typeof(ILogger) ) ) 3 <type type="IService" mapTo="SimpleService"> <typeConfig> <constructor> <param name=" logger" parameterType="ILogger" /> </constructor> </typeConfig> </type>

Unity – wstrzykiwanie zależności przez właściwości public class SimpleService : IService { [Dependency] public ILogger Logger { get; set; } } 1 2 container. RegisterType< IService, ServiceImpl>( new InjectionProperty("Logger") ) 3 <type type="IService" mapTo="SimpleService"> <typeConfig> <property name="Logger" propertyType="ILogger" /> </typeConfig> </type>

Unity – wstrzykiwanie zależności przez metody public class SimpleService : IService { [Dependency] public Init(Ilogger logger){ } } 1 2 container. RegisterType< IService, ServiceImpl>( new InjectionMethod("Init") ) 3 <type type="IService" mapTo="SimpleService"> <typeConfig> <Method name="Init” /> </typeConfig> </type>

Unity – specjalizacja public class SimpleService : IService { [Dependency("UI")] public ILogger Logger { get; set; } } 1 2 container. RegisterType< Logger, ServiceImpl>("UI", new InjectionConstructortypeof(ILogger) ) 3 <type name="UI" type="ILogger" mapTo="TraceSourceLogger"/>

Zasoby CommonServiceLocator implementation: http://www.codeplex.com/CommonServiceLocator Auto rejestracja dla unity http://autoregistration.codeplex.com/ Automocking