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



                                                     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
   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/en-
    us/library/aa973811.aspx
   Castle Project
    http://www.castleproject.org/container/
   StructureMap
    http://structuremap.sourceforge.net

Dependency Injection and Inversion Of Control

  • 1.
  • 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
  • 10.
    Configurazione Xml
  • 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