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

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

May 29, 2015

Download

Technology

Originally presented on IT Academic Day 2008 (Faculty of Mathematics and Computer Science, NCU, Torun)
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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?