SlideShare ist ein Scribd-Unternehmen logo
1 von 31
DependencyInjection Raffaele Fanizzi www.skyraysolutions.com Vicepresidente e TechnicalArchitect, SkyraySolutions SRL MCPD & MCTS
Agenda DependencyInjection Introduzione a Unity Configurazione di Unity Uso di Unity Un esempio pratico Altre potenzialità Q&A
DependencyInjection Cosa è la DependencyInjection? E’ una tecnica della programmazione orientata agli oggetti A cosa serve? Risolvere le dipendenze tra le componenti Favorire il disaccoppiamento tra le componenti
DependencyInjection High Coupling Dipendenza stretta tra le componenti Scarsa possibilità di modificare e/o sostituire una componente contenendo l’impatto sul resto del sistema Scarsa possibilità di realizzare un’applicazione testabile Facile da implementare: va a braccetto con la programmazione mediante “spaghetti code”  Classe PersonProvider Classe MainWindow Classe MessageManager
DependencyInjection High Coupling => Low Coupling Si usano le interfacce per esporre le funzionalità delle componenti Ogni componente implementerà una o più interfacce e richiamerà le altre componenti mediante le loro interfacce Ogni componente non sa nulla di come funzionano le altre, ma ne conosce esclusivamente l’interfaccia
DependencyInjection High Coupling => Low Coupling
DependencyInjection Interfaccia IPersonProvider Referenzia Low Coupling Dipendenza tra le componenti limitata Possibilità di modificare e/o sostituire una componente contenendo l’impatto sul resto del sistema Possibilità di sostituire le implementazioni per realizzare casi di test Non così semplice da implementare: richiede un minimo di progettazione del software  Classe PersonViewModel Interfaccia IMessageManager Risolve le referenze Classe PersonProvider Classe MessageManager Crea ???
DependencyInjection Il low coupling introduce due problemi:  chi e come vengono associate le interfacce alle implementazioni? Un InversionofControl (IoC) Container ha il compito di rilevare le dipendenze di una componente e di “inniettarle”, risolvendo l’associazione tra interfacce ed implementazione Cosa si intende con InversionofControl? Quale è la logica di controllo che viene invertita? La risposta è: la logica di creazione delle istanze
DependencyInjection Come possono essere iniettate le dipendenze? ConstructorInjection Property o Setter Injection MethodCallInjection
DependencyInjection ConstructorInjection Le componenti vengono iniettate dall’IoC Container attraverso il costruttore
DependencyInjection Property o Setter Injection Le componenti vengono iniettate dall’IoC Container richiamando il setter di alcune proprietà
DependencyInjection MethodCallInjection Le componenti vengono iniettate dall’IoC Container richiamando un metodo
DependencyInjection Al crescere della complessità di un software, del numero di classi e del disaccoppiamento, la risoluzione delle dipendenze diventa un problema
Introduzione a Unity E’ una libreria sviluppata da Microsoft che si occupa di implementare le seguenti funzionalità: DependencyInjection Interception L’attuale versione 2.0 è stata integrata nell’EnterpriseLibrary 5.0 Può essere adottata in qualsiasi progetto .NET 3.5/4.0 o Silverlight E’ open source rilasciata sotto licenza Microsoft Public License
Configurazione di Unity Unity può essere configurato in due modi: Programmaticamente File di configurazione (.config) Qual è l’aspetto più importante da configurare per un IoC Container? Mapping tra le interfacce e le classi che le implementano
Configurazione di Unity Possibili scenari di mapping tra le interfacce e le classi
Configurazione di Unity Possibili scenari di mapping tra le interfacce e le classi
Uso di Unity Per usare Unity è sufficiente creare un’istanza della classe UnityContainer ed utilizzarla per risolvere gli oggetti di cui abbiamo bisogno mediante il metodo Resolve Il metodo Resolve accetta in input qualsiasi tipo Se il tipo è un’interfaccia, utilizza la configurazione per tentare di risolverla e, se necessario, ne esegue la DependencyInjection Se il tipo è una classe se è necessario, ne esegue la DependencyInjection
Uso di Unity ConstructorInjection (default)
Uso di Unity ConstructorInjection (default)
Uso di Unity Property o Setter Injection
Uso di Unity Property o Setter Injection
Uso di Unity MethodInjection
Uso di Unity MethodInjection
Uso di Unity Constructor vs PropertyInjection vs MethodInjection, chi vince? Secondo me la ConstructorInjectionperché… La ConstructorInjection è l’unico tipo di injection che, potenzialmente, non richiede la decorazione con attributi custom di Unity Vi permette di astrarvi dallo specifico IoC Container La PropertyInjection e la MethodInjection richiedono l’uso obbligatorio dell’attributo di Unity e obbligano l’esposizione di una proprietà o di un metodo pubblico per consentire l’Injection
Uso di Unity Altre funzionalità utili Metodo RegisterInstance Consente di registrare un’istanza di una classe già esistente nel container Metodo BuildUp Consente di eseguire la DependencyInjection (solo Setter e MethodInjection) di un’istanza creata esternamente all’IoC Container Metodo ResolveAll Consente di risolvere tutte le classi registrate per una determinata interfaccia
Un esempio pratico Applied Pattern V1 – Spaghetti Code Applied Pattern V2 – Components Applied Pattern V3 – MVVM Applied Pattern V4 – DependencyInjection
Altre potenzialità Lifetime Management Pattern Singleton AspectOrientedProgramming Volete vederne un esempio ? 
Risorse MSDNhttp://msdn.microsoft.com DependencyInjection e IoC Containerhttp://martinfowler.com/articles/injection.html Unityhttp://unity.codeplex.com/ DotNetSidehttp://dotnetside.org Il mio bloghttp://www.vifani.com
Q & A Domande ?
Grazie per l’attenzione 

Weitere ähnliche Inhalte

Was ist angesagt?

Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediGabriele Manfredi
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern StrutturaliRiccardo Cardin
 
Introduzione ai Design Pattern
Introduzione ai Design PatternIntroduzione ai Design Pattern
Introduzione ai Design PatternRiccardo Cardin
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern ComportamentaliRiccardo Cardin
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good partsMassimo Groppelli
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramIl linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramGiuseppe Cramarossa
 

Was ist angesagt? (20)

Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Spring - Ecosistema
Spring - EcosistemaSpring - Ecosistema
Spring - Ecosistema
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
 
Spring @Aspect e @Controller
Spring @Aspect e @Controller Spring @Aspect e @Controller
Spring @Aspect e @Controller
 
Diagrammi Use Case
Diagrammi Use CaseDiagrammi Use Case
Diagrammi Use Case
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Introduzione ai Design Pattern
Introduzione ai Design PatternIntroduzione ai Design Pattern
Introduzione ai Design Pattern
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Diagrammi di Attività
Diagrammi di AttivitàDiagrammi di Attività
Diagrammi di Attività
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Diagrammi delle Classi
Diagrammi delle ClassiDiagrammi delle Classi
Diagrammi delle Classi
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Microservices
MicroservicesMicroservices
Microservices
 
SCBCD 1. generic ejb
SCBCD 1. generic ejbSCBCD 1. generic ejb
SCBCD 1. generic ejb
 
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagramIl linguaggio UML - Teoria ed esempi pratici sugli use case diagram
Il linguaggio UML - Teoria ed esempi pratici sugli use case diagram
 

Andere mochten auch

Dependency injection and inversion
Dependency injection and inversionDependency injection and inversion
Dependency injection and inversionchhabraravish23
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
Dependency Injection in .NET
Dependency Injection in .NETDependency Injection in .NET
Dependency Injection in .NETRemik Koczapski
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoMicrosoft Mobile Developer
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!benfante
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Nakov at Fuck Up Nights - July 2015 @ Sofia
Nakov at Fuck Up Nights - July 2015 @ SofiaNakov at Fuck Up Nights - July 2015 @ Sofia
Nakov at Fuck Up Nights - July 2015 @ SofiaSvetlin Nakov
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)Sabino Labarile
 
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")Svetlin Nakov
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroMassimo Bonanni
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosèguesta10af3
 
Професия "програмист"
Професия "програмист"Професия "програмист"
Професия "програмист"Svetlin Nakov
 
Dependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlDependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlSimone Busoli
 
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Svetlin Nakov
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModelDotNetMarche
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 

Andere mochten auch (20)

Dependency injection and inversion
Dependency injection and inversionDependency injection and inversion
Dependency injection and inversion
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
 
Dependency Injection in .NET
Dependency Injection in .NETDependency Injection in .NET
Dependency Injection in .NET
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progetto
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!
 
System.AddIn @ Xe.Net
System.AddIn @ Xe.NetSystem.AddIn @ Xe.Net
System.AddIn @ Xe.Net
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Nakov at Fuck Up Nights - July 2015 @ Sofia
Nakov at Fuck Up Nights - July 2015 @ SofiaNakov at Fuck Up Nights - July 2015 @ Sofia
Nakov at Fuck Up Nights - July 2015 @ Sofia
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)
 
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
Следвай вдъхновението си! (фестивал "Свободата да бъдеш - април 2016")
 
Introduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.MicroIntroduzione a MVVM e Caliburn.Micro
Introduzione a MVVM e Caliburn.Micro
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosè
 
Професия "програмист"
Професия "програмист"Професия "програмист"
Професия "програмист"
 
Dependency Injection and Inversion Of Control
Dependency Injection and Inversion Of ControlDependency Injection and Inversion Of Control
Dependency Injection and Inversion Of Control
 
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?Как да станем софтуерни инженери и да стартираме ИТ бизнес?
Как да станем софтуерни инженери и да стартираме ИТ бизнес?
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 

Ähnlich wie Dependency Injection

Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Giancarlo Valente
 
Panoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidPanoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidBoris D'Amato
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloCodemotion
 
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Simone Cossaro
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchPaolo Musolino
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Todi Appy Days
 
Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Appscodeblock
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1Christian Nastasi
 
Sql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediSql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediDavide Micale
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 

Ähnlich wie Dependency Injection (20)

Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
 
Panoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidPanoramica su Dagger2 per Android
Panoramica su Dagger2 per Android
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non solo
 
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
 
Hardware e plugin
Hardware e pluginHardware e plugin
Hardware e plugin
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Spring20 Javaday
Spring20 JavadaySpring20 Javaday
Spring20 Javaday
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
 
Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Apps
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Sql Injection: attacchi e rimedi
Sql Injection: attacchi e rimediSql Injection: attacchi e rimedi
Sql Injection: attacchi e rimedi
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Che cosa sono i microservizi?
Che cosa sono i microservizi?Che cosa sono i microservizi?
Che cosa sono i microservizi?
 

Mehr von Raffaele Fanizzi

Introduction to iOS development with Xamarin
Introduction to iOS development with XamarinIntroduction to iOS development with Xamarin
Introduction to iOS development with XamarinRaffaele Fanizzi
 
Web Development with Visual Studio 2012
Web Development with Visual Studio 2012Web Development with Visual Studio 2012
Web Development with Visual Studio 2012Raffaele Fanizzi
 
Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Raffaele Fanizzi
 
Push Notification: come rendere vive le app su Windows Phone
Push Notification: come rendere vive le app su Windows PhonePush Notification: come rendere vive le app su Windows Phone
Push Notification: come rendere vive le app su Windows PhoneRaffaele Fanizzi
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4Raffaele Fanizzi
 

Mehr von Raffaele Fanizzi (8)

Introduction to iOS development with Xamarin
Introduction to iOS development with XamarinIntroduction to iOS development with Xamarin
Introduction to iOS development with Xamarin
 
Mobile development .net
Mobile development .netMobile development .net
Mobile development .net
 
Web Development with Visual Studio 2012
Web Development with Visual Studio 2012Web Development with Visual Studio 2012
Web Development with Visual Studio 2012
 
Async Development con Visual Studio 2012
Async Development con Visual Studio 2012Async Development con Visual Studio 2012
Async Development con Visual Studio 2012
 
Push Notification: come rendere vive le app su Windows Phone
Push Notification: come rendere vive le app su Windows PhonePush Notification: come rendere vive le app su Windows Phone
Push Notification: come rendere vive le app su Windows Phone
 
HTML5
HTML5HTML5
HTML5
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 

Dependency Injection

  • 1. DependencyInjection Raffaele Fanizzi www.skyraysolutions.com Vicepresidente e TechnicalArchitect, SkyraySolutions SRL MCPD & MCTS
  • 2. Agenda DependencyInjection Introduzione a Unity Configurazione di Unity Uso di Unity Un esempio pratico Altre potenzialità Q&A
  • 3. DependencyInjection Cosa è la DependencyInjection? E’ una tecnica della programmazione orientata agli oggetti A cosa serve? Risolvere le dipendenze tra le componenti Favorire il disaccoppiamento tra le componenti
  • 4. DependencyInjection High Coupling Dipendenza stretta tra le componenti Scarsa possibilità di modificare e/o sostituire una componente contenendo l’impatto sul resto del sistema Scarsa possibilità di realizzare un’applicazione testabile Facile da implementare: va a braccetto con la programmazione mediante “spaghetti code”  Classe PersonProvider Classe MainWindow Classe MessageManager
  • 5. DependencyInjection High Coupling => Low Coupling Si usano le interfacce per esporre le funzionalità delle componenti Ogni componente implementerà una o più interfacce e richiamerà le altre componenti mediante le loro interfacce Ogni componente non sa nulla di come funzionano le altre, ma ne conosce esclusivamente l’interfaccia
  • 7. DependencyInjection Interfaccia IPersonProvider Referenzia Low Coupling Dipendenza tra le componenti limitata Possibilità di modificare e/o sostituire una componente contenendo l’impatto sul resto del sistema Possibilità di sostituire le implementazioni per realizzare casi di test Non così semplice da implementare: richiede un minimo di progettazione del software  Classe PersonViewModel Interfaccia IMessageManager Risolve le referenze Classe PersonProvider Classe MessageManager Crea ???
  • 8. DependencyInjection Il low coupling introduce due problemi: chi e come vengono associate le interfacce alle implementazioni? Un InversionofControl (IoC) Container ha il compito di rilevare le dipendenze di una componente e di “inniettarle”, risolvendo l’associazione tra interfacce ed implementazione Cosa si intende con InversionofControl? Quale è la logica di controllo che viene invertita? La risposta è: la logica di creazione delle istanze
  • 9. DependencyInjection Come possono essere iniettate le dipendenze? ConstructorInjection Property o Setter Injection MethodCallInjection
  • 10. DependencyInjection ConstructorInjection Le componenti vengono iniettate dall’IoC Container attraverso il costruttore
  • 11. DependencyInjection Property o Setter Injection Le componenti vengono iniettate dall’IoC Container richiamando il setter di alcune proprietà
  • 12. DependencyInjection MethodCallInjection Le componenti vengono iniettate dall’IoC Container richiamando un metodo
  • 13. DependencyInjection Al crescere della complessità di un software, del numero di classi e del disaccoppiamento, la risoluzione delle dipendenze diventa un problema
  • 14. Introduzione a Unity E’ una libreria sviluppata da Microsoft che si occupa di implementare le seguenti funzionalità: DependencyInjection Interception L’attuale versione 2.0 è stata integrata nell’EnterpriseLibrary 5.0 Può essere adottata in qualsiasi progetto .NET 3.5/4.0 o Silverlight E’ open source rilasciata sotto licenza Microsoft Public License
  • 15. Configurazione di Unity Unity può essere configurato in due modi: Programmaticamente File di configurazione (.config) Qual è l’aspetto più importante da configurare per un IoC Container? Mapping tra le interfacce e le classi che le implementano
  • 16. Configurazione di Unity Possibili scenari di mapping tra le interfacce e le classi
  • 17. Configurazione di Unity Possibili scenari di mapping tra le interfacce e le classi
  • 18. Uso di Unity Per usare Unity è sufficiente creare un’istanza della classe UnityContainer ed utilizzarla per risolvere gli oggetti di cui abbiamo bisogno mediante il metodo Resolve Il metodo Resolve accetta in input qualsiasi tipo Se il tipo è un’interfaccia, utilizza la configurazione per tentare di risolverla e, se necessario, ne esegue la DependencyInjection Se il tipo è una classe se è necessario, ne esegue la DependencyInjection
  • 19. Uso di Unity ConstructorInjection (default)
  • 20. Uso di Unity ConstructorInjection (default)
  • 21. Uso di Unity Property o Setter Injection
  • 22. Uso di Unity Property o Setter Injection
  • 23. Uso di Unity MethodInjection
  • 24. Uso di Unity MethodInjection
  • 25. Uso di Unity Constructor vs PropertyInjection vs MethodInjection, chi vince? Secondo me la ConstructorInjectionperché… La ConstructorInjection è l’unico tipo di injection che, potenzialmente, non richiede la decorazione con attributi custom di Unity Vi permette di astrarvi dallo specifico IoC Container La PropertyInjection e la MethodInjection richiedono l’uso obbligatorio dell’attributo di Unity e obbligano l’esposizione di una proprietà o di un metodo pubblico per consentire l’Injection
  • 26. Uso di Unity Altre funzionalità utili Metodo RegisterInstance Consente di registrare un’istanza di una classe già esistente nel container Metodo BuildUp Consente di eseguire la DependencyInjection (solo Setter e MethodInjection) di un’istanza creata esternamente all’IoC Container Metodo ResolveAll Consente di risolvere tutte le classi registrate per una determinata interfaccia
  • 27. Un esempio pratico Applied Pattern V1 – Spaghetti Code Applied Pattern V2 – Components Applied Pattern V3 – MVVM Applied Pattern V4 – DependencyInjection
  • 28. Altre potenzialità Lifetime Management Pattern Singleton AspectOrientedProgramming Volete vederne un esempio ? 
  • 29. Risorse MSDNhttp://msdn.microsoft.com DependencyInjection e IoC Containerhttp://martinfowler.com/articles/injection.html Unityhttp://unity.codeplex.com/ DotNetSidehttp://dotnetside.org Il mio bloghttp://www.vifani.com
  • 30. Q & A Domande ?