Simone Busoli
14/06/2008 - Milano


Comunemente DI - IoC
Principi comuni di disegno software
 Alta coesione
 Basso accoppiamento
…

Basso accoppiamento
 Riduzione delle dipendenze tra componenti
software
 Chi conosce chi?

Risoluzione dipendenze tra componenti

Voglio poter registrare le iscrizioni ad un
evento
 Persistere i dettagli dell’iscritto
 Comunicare se l’iscrizione è andata a buon fine
tramite mail
EmailService
SubscriptionService
PersonRepository

SubscriptionService conosce direttamente i dettagli di
EmailService e PersonRepository BAD

Il servizio conosce solo l’interfaccia dei componenti
che utilizza GOOD

Iniettare dipendenze dall’esterno rende più
onerosa l’istanziazione di componenti
 Necessario conoscere tutte le dipendenze

Hollywood Principle
 Don’t call us, we will call you!
Vorrei un’istanza di
SubscriptionService



Entità esterna all’applicazione
Configurabile
Conosce le dipendenze tra i componenti ed è
in grado di soddisfarle a runtime
IoC Container
Vorrei un’istanza di SubscriptionService
Istanza completa di tutte le dipendenze


Inversion of Control container open source
Stabile – production ready
Si configura il
container (xml, boo,
C#)
Si richiede l’istanza
di un componente
Il container si occupa
di soddisfare le
dipendenze e creare
l’istanza

Configurazione Xml

Codice client

Molto meglio, eh?
Altri containers

 StructureMap
 Spring.Net
 Autofac
…



Inversion of Control and Dependency
Injection: Working with Windsor Container
http://msdn.microsoft.com/enus/library/aa973811.aspx
Castle Project
http://www.castleproject.org/container/
StructureMap
http://structuremap.sourceforge.net
Scarica

Dependency Injection Inversion of Control