Upload
marcin-daczkowski
View
1.474
Download
0
Embed Size (px)
DESCRIPTION
Originally presented on IT Academic Day 2008 (Faculty of Mathematics and Computer Science, NCU, Torun)
Citation preview
Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe
Inversion Of Control i Dependency Injection
Marcin Daczkowski, [email protected]
Agenda
• Charakterystyka• Zalety i wady• Warianty• Zastosowania
• Przegląd kontenerów• Unity– Architektura– Przykłady użycia
Charakterystyka
Każdy wzorzec określa problem, który wielokrotnie występuje w naszym środowisku,
a następnie opisuje zasadniczą częśćrozwiązania tego problemu.
Christopher Alexander (1977)A Pattern Language: Towns, Buildings, Construction
Inversion of Control
• Wzorzec architektoniczny• Przeniesienie odpowiedzialności• Różne aspekty– Sterowanie– Determinowanie powiązań
Dependency Injection
• Rozwiązuje ten sam problem, co wzorce kreacyjne:– Fabryka Abstrakcyjna–Metoda Wytwórcza–Budowniczy
• Zgodnie z ideą Inversion of Control• Bob Martin - SOLID
• Autor - Martin Fowler
Tight-coupling
A
B
Cużywa
tworzy
używa
Dependency Injection
A
B
ICużywa
tworzy
używa
Dependency Injection + Kontener
A
B
ICużywa
tworzy
używaKontener DI
używa
Service Locator
A
B
ICużywa
tworzy
używa ServiceLocator
używa
Zalety i wady
ZaletyElastyczność
Testowalność
SRP
Automatyzacja procesu kreacji
Centralne zarządzanie
zależnościami
Wady
Niebezpośredniość
Wydajność
Utrudnia zaciemnianie
kodu
Warianty
• Constructor Injection
IC new B(new C()); public B( ) { }
IC var b = new B(); b.C = new C();
public { set; }
• Property Injection
• Interface Injection
IC
var b = new B(); b.InjectC(new C());
void InjectC( c)
B : IInjectC
Zastosowania
Hosty aplikacyjne
• Windows Forms• WPF• ASP.NET Web Forms• ASP.NET MVC• WCF• …
Biblioteki
• Prywatne kontenery• Kontener współdzielony z hostem• Integracja poprzez mechanizmy rozszerzeń
Przegląd kontenerów
• Ninject• Autofac• Structure Map• Unity• Castle Windsor• Spring.NET
Wybrane rozwiązania
Źródło: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html
Windsor
StructureMap
Unity
Spring.NET
new()
0 5 10 15 20 25 30 35 40 45 50
1.581
0.802
3.136
1.169
0.03
30,915
36.622
8.164
44.149
0.1
Transient Singleton
Unity
Unity
Object Builder
Object Builder
Atrybuty
TypyG
eneryczne
Tablice
Life
time
Man
ager
s
Konfiguracja
Static Factory…
AOP
Object Builder 2.0
Stra
tegy
Stra
tegy
Stra
tegy
Policy Policy Policy
Locator Lifetime container
…
…
DEMO
Pytania?