settembre 2007 Blog Posts
Grazie alle funzionalità di Constructor Argument Resolution viste nei post precedenti Spring.NET implementa l' IoC di tipo 3 (Constructor Injection). Iniziamo estendendo la classe per tradurre frasi dall'inglese all'italiano in modo che supporti altri linguaggi, per fare questo applichiamo il Design Pattern Strategy. Creiamo l'interfaccia ITranslator la quale rappresenta il contratto: 1: public interface ITranslator 2: { 3: string Translate(string phraseToTranslate); 4: }
procediamo implementando le classi che si occuperanno realmente di tradurre la frase, ne facciamo una dall'inglese all'italiano:
1: public class EnglishToItalianTranslator : ITranslator 2: { ...
E' stata rilasciata una nuova Release Candidate di CastleProject, scaricabile dalla pagina di download. Sul blog di Hammet potete leggere l'elenco delle novità rispetto alla versione 1.0 RC2.
Technorati Tags: CastleProject
Grazie a Spring.NET possiamo settare le proprietà di un oggetto al momento della sua creazione sempre tramite il file di configurazione, basterà impostare il tag <property/>. Modifichiamo la classe Person dei post precedenti eliminando il costruttore parametrico e modifichiamo il file .config così:<object id="Matteo"
type="SpringSeries.Core.SettingProperties.Person, 10.SettingProperties">
<property name="FirstName" value="Matteo" />
<property name="Age" value="24" />
</object>
rispetto alla valorizzazzione dei parametri del costruttore in questo caso abbiamo a disposizione solo il Name Matching. Utilizzando il tag <null/> all'interno di <property/> possiamo impostare una proprietà a null. Per esempio supponiamo che Age...
Oggi un mio amico mi ha chiesto se è possibile valorizzare a run-time i parametri di un costruttore invece di usare il file di configurazione. Certo che si può fare! Basta definire il nostro oggetto con un qualsiasi tipo di matching visti nei post precedenti ed in fine istanziare la classe utilizzando un particolare overload del metodo GetObject, il quale accentta in ingresso un array di object contenente i valori da passare al costruttore. Quindi il file di configurazione rimane invariato:<object id="Matteo"
type="SpringSeries.Core.RuntimeMatching.Person, 09.RuntimeMatching">
<constructor-arg name="firstName"...
In questo post vedremo l'ultima modalità di matching dei parametri, il Name Matching. Come negli episodi precedenti per istanziare la classe Person basterà effettuare una piccola modifca ai tag constructor-arg :<object id="Matteo"
type="SpringSeries.Core.NameMatching.Person, 08.NameMatching">
<constructor-arg name="firstName" value="Matteo" />
<constructor-arg name="age" value="24" />
</object>
Technorati Tags: Spring.NET
...uno dei più forti piloti di Rally di tutti i tempi! http://www.racingworld.it/rally/notizia2.php?idtitolo=4500 Senza parole.
Nel post precedente abbiamo visto come istanziare una classe con il costruttore parametrico utilizzando il Type Matching adesso vedremo come istanziare la solita classe utilizzando la modalità di Index Matching. Per farlo modificheremo il file di configurazione così:<object id="Matteo"
type="SpringSeries.Core.IndexMatching.Person, 07.IndexMatching">
<constructor-arg index="0" value="Matteo" />
<constructor-arg index="1" value="24" />
</object>
come vedete basta indicare l'indice zero-based della posizione del parametro all'interno della firma del costruttore.
Technorati Tags: Spring.NET
In un post precedente abbiamo visto come instanziare un oggetto tramite il suo costruttore di default, quindi privo di paremetri, con Spring.NET possiamo anche creare oggetti che hanno un costruttore parametrico. La particolarietà sta nel fatto che possiamo valorizzare i parametri direttamente nel file di configurazione. Supponiamo di avere una classe Person definità così: 1: public class Person 2: { 3: private string _firstName; 4: private short _age; 5: 6: public string FirstName ...
Gli oggetti creati con Spring.NET possono avere due tipi di visibilità e ciclo di vita: Singleton e Prototype (non-singleton). Quando impostiamo la creazione di un oggetto nella prima modalità indichiamo a Spring.NET che noi vogliamo utilizzare un unica istanza di esso condivisa per tutto il ciclo di vita dell'applicazione, quindi la prima volta che richiamiamo l'oggetto tramite il suo id esso viene creato e le volte successive viene restituita sempre la solita istanza. L' altra modalità invece indica a Spring.NET che ad ogni richiesta deve essere creata una nuova istanza dell' oggetto, quindi il suo ciclo di vita sarà gestito...
Per rendere il file di configurazione più leggibile Spring.NET ha una funzionalità chiamata Type Aliases, la quale permette di attribuire un nome ad un tipo. Nel post precedente, abbiamo visto la difficolta di lettura della definizione di una collection Dictionary<string,<Dictionary<int,object>>, addesso definiamola utilizzando gli aliases. Prima di tutto dobbiamo aggiungere il relativo configuration handler al section group di Spring.NET, il quale risulterà così:<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
<section name="typeAliases" type="Spring.Context.Support.TypeAliasesSectionHandler, Spring.Core"/>
</sectionGroup>
</configSections>
in seguito possiamo definire i nostri aliases all'interno dell' apposito tag:<typeAliases>
<alias name="NestedDictionary" type="System.Collections.Generic.Dictionary<int,object>"/>
...
Spring.NET è basato sulla versione 2.0 del .NET Framework quindi permette l' utilizzo dei generics. Vediamo subito un paio di esempi per capire la sintassi, cominciamo dichiarando e creando una semplice lista di interi:
<object id="ListInteger" type="System.Collections.Generic.List<int>" />
per istanziare la collection utilizzeremo questa riga di codice:
List<int> _col1 = (List<int>)_ctx.GetObject("ListInteger");
adesso dichiariamo una collection Dictionay con il tipo chiave string e il tipo valore object:
<object id="DictionaryStringObject" type="System.Collections.Generic.Dictionary<string,object>" />
di seguito...
Visto che la pizzoccherata è stata spostata al week-end successivo, e gli MVP sono riuniti a Pistoia, ho deciso di organizzare una super cena a base di cacciucco per riunire la community in quel di Livorno per Sabato 29 Settembre. Per chi si trattiene anche dopo cena il programma offre bevuta sul lungo mare (zona molto consigliata ai single, vista l'abbondante quantita di gnocca ). L'invito naturalmente è rivolto a tutti, Toscani e non, quindi se qualcuno da lontano vuole venire ma non sa dove pernottare basta che me lo dica e provvederò subito!! Per iscriversi come al solito potete lasciare un commento a questo post, oppure rispondere a...
Spesso nel nostro codice per creare un oggetto utilizziamo un semplice metodo statico (Factory Method) che si occupa di fare la new dell'oggetto interessato. In questo caso possiamo "dire" a Spring.NET di utilizzare il metodo factory per la creazione dell'oggetto desiderato, vediamo come fare. Per prima cosa aggiungiamo alla classe del post precedente il seguente metodo factory:public static EnglishToItalianTranslator CreateInstance()
{
return new EnglishToItalianTranslator();
}
in fine andiamo a modificare il file di configurazione (.config) aggiungendo l'attributo factory-method ed indicando il nome del metodo da utilizzare:<object id="MyBasicTranslator"
type="SpringSeries.Core.FactoryMethod.EnglishToItalianTranslator, 02.FactoryMethod"
...
Dopo tante chiacchere cominciamo ad entrare nel vivo e vediamo come configurare e creare un semplice oggetto tramite il suo costruttore di default. Prendiamo come esempio una classe, volutamente semplificata, che deve tradurre una frase dall'inglese all'italiano, essa verrà modificata ed evoluta nei futuri post. La classe risulterà simile alla seguente:public class EnglishToItalianTranslator
{
public EnglishToItalianTranslator()
{
}
public string Translate(string phraseToTranslate)
{
string phraseTranslated;
//qui va l'algoritmo di traduzione...
...
Le possibili integrazioni sono due: Viene fornito un file XSD che ci aiuta nella scrittura (tramite IntelliSense) e nella validazione del file di configurazione di Spring.NET. Il file è raggiungibile a questo url: http://www.springframework.net/xsd/spring-objects.xsd e va salvato in una delle seguenti path di Visual Studio, a seconda della versione posseduta: VS2003: C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\schemas\xml\ VS2005: C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas Se utilizzate il Setup verra registrata la documentazione delle API di Spring.NET. Technorati Tags: Spring.NET