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:
Spring.NET