Invest in people before investing in tools

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

[Spring.NET #7] Spring.Core, Visibilità e Ciclo di vita degli oggetti

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 dal .NET Framework, proprio come se usassimo l'operatore new. Se nel file di configurazione non specifichiamo niete verrà utilizzata la modalità di default, che è Singleton. Utilizzando la semplice classe traduttore descritta in un precedente post vediamo come utilizzarla nelle due modalità. Come sempre per prima cosa impostiamo gli oggetti nel file di cofigurazione indicando con l'attributo singleton la modlità:

   1: <object id="TranslatorSingleton" 
   2:         type="SpringSeries.Core.ObjectScope.EnglishToItalianTranslator, 05.ObjectScope"
   3:         singleton="true"/>
   4: <object id="TranslatorPrototype" 
   5:         type="SpringSeries.Core.ObjectScope.EnglishToItalianTranslator, 05.ObjectScope"
   6:         singleton="false"/>

verifichiamo la visibilità Singleton con questo snippet:

   1: EnglishToItalianTranslator _translator1 = (EnglishToItalianTranslator)_ctx.GetObject("TranslatorSingleton");
   2: EnglishToItalianTranslator _translator2 = (EnglishToItalianTranslator)_ctx.GetObject("TranslatorSingleton");
   3:  
   4: Console.WriteLine((_translator1 == _translator2));

e la visibilità Prototype con questo:

   1: EnglishToItalianTranslator _translator3 = (EnglishToItalianTranslator)_ctx.GetObject("TranslatorPrototype");
   2: EnglishToItalianTranslator _translator4 = (EnglishToItalianTranslator)_ctx.GetObject("TranslatorPrototype");
   3:  
   4: Console.WriteLine((_translator3 == _translator4));

Il risultato a video sarà true per il primo snippet e false per il secondo.

Technorati Tags:

Print | posted on mercoledì 12 settembre 2007 23:21 | Filed Under [ .NET OpenSource Spring.NET ]

Powered by:
Powered By Subtext Powered By ASP.NET