29
Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe Inversion Of Control i Dependency Injection Marcin Daczkowski, AIS.PL [email protected]

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektowe

Inversion Of Control i Dependency Injection

Marcin Daczkowski, [email protected]

Page 2: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection
Page 3: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Agenda

• Charakterystyka• Zalety i wady• Warianty• Zastosowania

• Przegląd kontenerów• Unity– Architektura– Przykłady użycia

Page 4: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Charakterystyka

Page 5: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

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

Page 6: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Inversion of Control

• Wzorzec architektoniczny• Przeniesienie odpowiedzialności• Różne aspekty– Sterowanie– Determinowanie powiązań

Page 7: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

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

Page 8: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Tight-coupling

A

B

Cużywa

tworzy

używa

Page 9: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Dependency Injection

A

B

ICużywa

tworzy

używa

Page 10: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Dependency Injection + Kontener

A

B

ICużywa

tworzy

używaKontener DI

używa

Page 11: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Service Locator

A

B

ICużywa

tworzy

używa ServiceLocator

używa

Page 12: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Zalety i wady

Page 13: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

ZaletyElastyczność

Testowalność

SRP

Automatyzacja procesu kreacji

Centralne zarządzanie

zależnościami

Page 14: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Wady

Niebezpośredniość

Wydajność

Utrudnia zaciemnianie

kodu

Page 15: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Warianty

Page 16: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

• Constructor Injection

IC new B(new C()); public B( ) { }

IC var b = new B(); b.C = new C();

public { set; }

• Property Injection

Page 17: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

• Interface Injection

IC

var b = new B(); b.InjectC(new C());

void InjectC( c)

B : IInjectC

Page 18: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Zastosowania

Page 19: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Hosty aplikacyjne

• Windows Forms• WPF• ASP.NET Web Forms• ASP.NET MVC• WCF• …

Page 20: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Biblioteki

• Prywatne kontenery• Kontener współdzielony z hostem• Integracja poprzez mechanizmy rozszerzeń

Page 21: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Przegląd kontenerów

Page 22: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

• Ninject• Autofac• Structure Map• Unity• Castle Windsor• Spring.NET

Wybrane rozwiązania

Page 23: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Ź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

Page 24: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Unity

Page 25: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Unity

Object Builder

Page 26: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Object Builder

Atrybuty

TypyG

eneryczne

Tablice

Life

time

Man

ager

s

Konfiguracja

Static Factory…

AOP

Page 27: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Object Builder 2.0

Stra

tegy

Stra

tegy

Stra

tegy

Policy Policy Policy

Locator Lifetime container

Page 28: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

DEMO

Page 29: Tworzenie elastycznych aplikacji .NET w oparciu o wzorce projektoweInversion Of Control i Dependency Injection

Pytania?