Utilizzare Windsor Castle come IoC container

di Cristiano Degiorgis, in .NET Framework,

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.

Cos'è un Inversion of Control container

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.

4 pagine in totale: 1 2 3 4

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc