Dall'archivio articoli > .NET Framework
Utilizzare Windsor Castle come IoC container
- 0
- 0
- 0
- 633,94 KB
Per poter utilizzare questa funzionalità, devi fare il login o iscriverti.
L'Inversion of Control è un designing pattern per la risoluzione delle dipendenze tra oggetti mentre Inversion of Control container è un framework che facilita l'applicazione del relativo pattern. Un IoC container rende estremamente agile l'installazione di classi definite all'interno dell'applicazione in cui viene utilizzato, in particolare quando queste classi hanno dipendenze con altre.
Supponiamo ad esempio di avere una ClassA il cui costruttore si aspetta come parametro un'istanza della ClassB o la relativa interface.
public class ClassA { public ClassA(IClassB cb) { ... } }
Per creare un'istanza di ClassA si dovrebbe scrivere il seguente codice
var b = new ClassB_01(); //ClassB_01 : IClassB var a = new ClassA(b);
Pensiamo se anche la classe che implementa IClassB dipende a sua volta da un'altra classe e così via. A questo punto ogni volta che abbiamo bisogno di un'istanza dobbiamo, in primis scrivere un sacco di codice, ma ancora peggio nel nostro codice dobbiamo decidere esplicitamente quale concreta classe utilizzare per soddisfare la relativa interface.
Usando invece un Inversion of Control container la creazione di istanze con nested dipendenze è assolutamente agile in quanto quello che dobbiamo fare è semplicemente mettere nel container le classi che vogliamo utilizzare nella nostra applicazione e decidere in un unico punto, ovvero nella popolazione del container, quale concreta classe sarà usata per soddisfare l'interface richiesta dalla dipendenza.
Quando chiediamo al container un'istanza della ClassA, il container risolverà le dipendenze ovvero crea, se necessario, un'istanza non solo della classe richiesta, ovvero ClassA nel nostro esempio, ma anche un'istanaza della ClassB_01: quella che abbiamo deciso di utilizzare ogni volta che richiediamo un'istanza basata sull'interface IClassB.
Questo, in estrema sintesi, è quello che fa un IoC container e in questo articolo presentiamo un prodotto open source: Windsor Castle. Se ci stiamo domandando perché usare un prodotto di terze parti, anziché usare un equivalente soluzione del .NET Framework la risposta è che .NET non ha un prodotto equivalente. MEF (Managed Extensibility Framework) è un motore di composition che sfrutta IoC. A questo indirizzo possiamo trovare un'interessante post che spiega la differenza.
Nella comunità open source possiamo trovare diversi validi IoC container tra cui AutoFac, Spring.net, Ninject, Unity, StructureMap, ma Windsor è il favorito dall'auto dell'articolo. Entriamo quindi nello specifico di Windsor descrivendone le feature basi e fornendo suggerimenti derivati dalla esperienza piuttosto che una dettagliata guida del prodotto.
Attenzione: Questo articolo contiene un allegato.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.