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