Invest in people before investing in tools

Il blog di Matteo Baglini
posts - 118, comments - 95, trackbacks - 697

[Spring.NET #3] Spring.Core, Definire e Creare un Oggetto via Costruttore

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...
        //io semplifico utilizzando un semplice if...
        if (phraseToTranslate == "Hello Spring.NET !!")
        {
            phraseTranslated = "Ciao Spring.NET !!";
        }
        else
        {
            phraseTranslated = "Frase sconosciuta.";
        }

        return phraseTranslated;
    }
}
Normalmente per instanziare questa classe utilizziamo l'operatore new così:
EnglishToItalianTranslator _translator = new EnglishToItalianTranslator();

Grazie a Spring.NET possiamo definire quale oggetto creare tramite un file Xml e lasciare a lui il compito di creazione dell'oggeto. Vediamo come impostare il file di configurazione, per prima cosa apriamo il file .config e dichiariamo un nuovo section group 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" />
    </sectionGroup>
  </configSections>

Adesso impostiamo lo "scheletro" per la definizioni degli oggetti:

<spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!-- ... qui definirò gli oggetti ...-->
    </objects>
  </spring>

In fine andiamo ad inserire la definizione della nostra classe:

<object id="MyBasicTranslator" type="SpringSeries.Core.SimpleObject.EnglishToItalianTranslator, 01.Core.SimpleObject"/>

La definizione avviene tramite l'elemento <object /> impostando gli attributi id e type. Nel primo inseriamo un nome univoco per tutto il file .config e nel secondo il full assembly qualified name della nostra classe. Adesso dopo aver referenziato l'assembly Spring.Core.dll non ci resta che impostare il codice così:

IApplicationContext _ctx = ContextRegistry.GetContext();
EnglishToItalianTranslator _translator = (EnglishToItalianTranslator)_ctx.GetObject("MyBasicTranslator");

Con la prima riga di codice leggiamo tutte le definizioni e le dipendenze degli oggetti dichiarati nel file .config e con la seconda richiediamo l'oggetto instanziato tramite il suo id, effettuando un cast dato che il metodo GetObject restituisce un tipo object. In realta per la sola lettura delle definizioni potevamo usare un implementazione dell'interfaccia IObjectFactory, infatti IApplicationContext aggiunge a quest'ultima una serie di funzionalita come l'integrazione con il motore di AOP. In fine non ci resta che usare il nostro traduttore:

Console.WriteLine(_translator.Translate("Hello Spring.NET !!"));
Console.WriteLine(_translator.Translate("Hello World !!"));

Questo semplice esempio serve per introdurre la sintassi del file di impostazione di Spring.NET, post dopo post complicheremo l'implementazione della classe traduttore, introducendo paramentri e dipendenze con altri oggetti.

Mi raccomando, non esitate a lasciarmi feedback!!

Technorati Tags:

Print | posted on sabato 1 settembre 2007 14:19 | Filed Under [ .NET OpenSource Spring.NET ]

Powered by:
Powered By Subtext Powered By ASP.NET