This is a short presentation I gave back in 2008 at the UgiAlt.Net conference in Milan about inversion of control and dependency injection principles. Examples use Castle project's Windsor container.
2. 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
3. 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
4. SubscriptionService conosce direttamente i dettagli di
EmailService e PersonRepository BAD
5. Il servizio conosce solo l’interfaccia dei componenti
che utilizza GOOD
6. Iniettare dipendenze dall’esterno rende più
onerosa l’istanziazione di componenti
Necessario conoscere tutte le dipendenze
7. Hollywood Principle
Don’t call us, we will call you!
Vorrei un’istanza di
SubscriptionService
8. 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
9. Inversion of Control container open source
Stabile – production ready
Il container si occupa
Si configura il
Si richiede l’istanza di soddisfare le
container (xml, boo,
di un componente dipendenze e creare
C#)
l’istanza
11. Codice client
Molto meglio, eh?
Altri containers
StructureMap
Spring.Net
Autofac
…
12. Inversion of Control and Dependency
Injection: Working with Windsor Container
http://msdn.microsoft.com/en-
us/library/aa973811.aspx
Castle Project
http://www.castleproject.org/container/
StructureMap
http://structuremap.sourceforge.net