Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe Inversion Of Control i Dependency Injection

on

  • 2,440 views

Originally presented on IT Academic Day 2008 (Faculty of Mathematics and Computer Science, NCU, Torun)

Originally presented on IT Academic Day 2008 (Faculty of Mathematics and Computer Science, NCU, Torun)

Statistics

Views

Total Views
2,440
Views on SlideShare
2,420
Embed Views
20

Actions

Likes
0
Downloads
1
Comments
0

3 Embeds 20

http://www.slideshare.net 17
http://www.linkedin.com 2
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Kilka luźnych pomysłów realizacji injekcji dla komponentów1) Automatyczna rejestracja dla ładowanych assemblies z komponentamiPodczas inicjalizacji aplikacji hosta:AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(OnCurrentDomainAssemblyLoad);static void OnCurrentDomainAssemblyLoad(object sender, AssemblyLoadEventArgs args){ IEnumerable types = args.LoadedAssembly.GetTypes() .Where(t => typeof(IContainerConfigurator).IsAssignableFrom(t)); foreach (Type t in types) { var configurator = Activator.CreateInstance(t) as IContainerConfigurator; var container = Application["container"] as IUnityContainer; var childContainer = container.CreateChildContainer(); configurator.Configure(childContainer) }}2) Warstwa fabryk oprartych o wsparcie dla hierarchicznych kontenerów dostępne m.in. w Unity. LogicFactory(){ CreateOrderProcessor() { using (var ctx = new CurrentContainerScope()) // if current container exists in TLS, creates subcontainer within it if not creates new container { if (!ctx.HasMappingDefined) { ctx.Register(); } if (!ctx.HasMappingDefined) { ctx.Register(); } return ctx.Resolve(); // dzieki temu mozemy uzywac AOP itp. } } CreateEngine(EngineType type) { using (var ctx = new CurrentContainer()) // decorates the current container from TLS { if (!ctx.HasMappingDefined) { ctx.Register(); } var result = new Engine(type); ctx.BuildUp(result); return result; } }}
  • W kolejnej wersji (2.0) Unity „pochłonie” klasy ObjectBuildera (nie będzie konieczności referencjonowania assembly ObjectBuildera).

Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe Inversion Of Control i Dependency Injection Presentation Transcript

  • 1. Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i DependencyInjection
    Marcin Daczkowski, AIS.PL
    marcin.daczkowski@ais.pl
  • 2.
  • 3. Agenda
    Charakterystyka
    Zalety i wady
    Warianty
    Zastosowania
    Przegląd kontenerów
    Unity
    Architektura
    Przykłady użycia
  • 4. Charakterystyka
  • 5. Każdy wzorzec określa problem,
    który wielokrotniewystępuje w naszym środowisku,
    a następnie opisuje zasadniczączęśćrozwiązaniatego problemu.
    Christopher Alexander (1977)
    A Pattern Language: Towns, Buildings, Construction
  • 6. Inversion of Control
    Wzorzec architektoniczny
    Przeniesienie odpowiedzialności
    • Różne aspekty
    • 7. Sterowanie
    • 8. Determinowanie powiązań
  • Dependency Injection
    Autor - Martin Fowler
    Rozwiązuje ten sam problem, co wzorce kreacyjne:
    Fabryka Abstrakcyjna
    Metoda Wytwórcza
    Budowniczy
    Zgodnie z ideą Inversion of Control
    Bob Martin - SOLID
  • 9. Tight-coupling
    tworzy
    A
    B
    C
    używa
    używa
  • 10. DependencyInjection
    tworzy
    A
    B
    IC
    używa
    używa
  • 11. DependencyInjection + Kontener
    tworzy
    A
    B
    Kontener DI
    IC
    używa
    używa
    używa
  • 12. Service Locator
    tworzy
    A
    B
    Service
    Locator
    IC
    używa
    używa
    używa
  • 13. Zalety i wady
  • 14.
  • 15.
  • 16. Warianty
  • 17. ConstructorInjection
    new B(new C());
    IC
    public B( ) { }
    • Property Injection
    var b = new B();
    b.C = new C();
    IC
    public { set; }
  • 18. InterfaceInjection
    IC
    voidInjectC( c)
    var b = new B();
    b.InjectC(new C());
    B : IInjectC
  • 19. Zastosowania
  • 20. Hosty aplikacyjne
    Windows Forms
    WPF
    ASP.NET Web Forms
    ASP.NET MVC
    WCF

  • 21. Biblioteki
    Prywatne kontenery
    Kontener współdzielony z hostem
    Integracja poprzez mechanizmy rozszerzeń
  • 22. Przegląd kontenerów
  • 23. Ninject
    Autofac
    Structure Map
    Unity
    Castle Windsor
    Spring.NET
    Wybrane rozwiązania
  • 24. Źródło: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html
  • 25. Unity
  • 26. Unity
    ObjectBuilder
  • 27. Konfiguracja
    AOP
    Atrybuty
    ObjectBuilder
    Typy
    Generyczne
    Lifetime
    Managers
    Tablice

    StaticFactory
  • 28. Policy
    Policy
    Policy
    ObjectBuilder 2.0
    Strategy
    Strategy
    Strategy


    Locator
    Lifetimecontainer
  • 29. DEMO
  • 30. Pytania?