Quasi tutti ormai anche nel mondo .NET hanno sentito parlare di Inversion of Control e Dependency Injection. Molti hanno usato uno dei framework disponibili (Castle, Spring, ecc...) e ne hanno colto i vantaggi.
Però la quasi totalità degli esempi e tutorial che si trovano in rete mostrano esempi in cui la costruzione di un oggetto viene fatta dal Fx di IoC tramite il costruttore.
In questi giorni mi serviva che gli oggetti venissero costruiti dal framework di IoC (in questo caso Castle) utilizzando però una classe factory invece che il loro costruttore.
Dopo un po' di ricerche all'interno del wiki ho trovato una...
In questi giorni lavorando con NH mentre stavo realizzando un metodo di caricamento tramite ICriteria, il fido intellisense di VS2008 mi ha mostrato la classe Example.
Questa permette di filtrare i dati usando un oggetto "semipopolato" per costruire la clausola where.
Ad esempio, supponete di voler caricare tutti gli ordini in stato "accettato" del 09/04/2007. Usando l'oggetto Example potete scrivere:
Ordine ordine = new Ordine();ordine.Stato = StatiOrdine.Accettato;ordine.Data = new DateTime(2007, 04, 09);ICriteria criteria = session.CreateCriteria(typeof(Ordine));criteria.Add(Example.Create(ordine));IList result = criteria.List();
In pratica NH cerca tra le proprietà dell'oggetto ordine quelle che hanno un valore diverso dal default (null, zero, DateTime.MinValue, ecc...) e le usa per costruire...