io ti ringrazio per non avermi fatto notare l'italiano mooolto approssimativo  , sarà che ormai vado fisso a letto alle 3 di mattina.


p.s. siamo in un angolino , quaggiù tra i commenti agli script non ci sente nessuno

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
LOL

Fammi poi sapere se è vero che funziona senza problemi (esclusa l'eventuale update a runtime del web.config naturalemente) anche senza implementare i "set".
Thanks,
Matteo

Matteo Casati
GURU4.net
Matteo, quello che hai realizzato è un oggetto singleton (vedasi il pattern GOF relativo).

Quella da te proposta è una implementazione base. La versione che segue è più completa in quanto è thread-safe:

public class SingletonConfiguration : ConfigurationSection 
{ 
private static volatile SingletonConfiguration _instance = null; 
private static object _syncLock = new object();

private SingletonConfiguration() { }

public static SingletonConfiguration GetInstance() 
{ 
if (_instance == null)
{
lock(_syncLock)
{
if (_instance == null)
_instance = ConfigurationManager.GetSection("...") as SingletonConfiguration;
}
}
return _instance; 
}
}


Come vedi, il factory method GetSection() finisce dentro ad un blocco ad accesso esclusivo in funzione dell'oggetto _syncLock. Questo approccio è utile in un ottica di utilizzo della classe che dichiara il singleton in un contesto multi-thread. Anche in quest'ottica va considerato l'uso della keyword volatile, che serve in generale per evitare l'ottimizzazione in memoria della variabile a cui si riferisce.

Ciao, Ricky.
Modificato da rickyvr il 23 marzo 2006 11.49 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
ci hai scovato pure quaggiù.

un dubbio che spesso mi assilla, a cui non ho trovato risposte chiare.

capisco la necessità di proteggere membri statici come in questo caso, tipo collezioni ecc.

ma se io _instance l'inizializzassi nel costruttore statico, sarebbe sempre necessario il lock, o meglio è possibile che il costruttore statico sia eseguiro da due tread contemporaneamente?

l'esecuaione contemporanea del costruttore statico contrasterebbe conla mia idea di "statico", ma è una mia idea

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Quello che ha proposto Matteo è l'implementazione del pattern tale e quale. La mia è invece una interpretazione idiomatica dello stesso pattern, orientata alla specificità di .NET e C#.

Per ulteriori approfondimenti, vi consiglio di leggervi questo contenuto su MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/ImpSingletonInCsharp.asp

Inoltre in questo link vengono chiariti i dubbi di Marco:
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Ciao, Ricky.
Modificato da rickyvr il 23 marzo 2006 12.41 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
@Ricky: concordo pienamente con l'implementazione thread-safe da te proposta (in realtà è quella che uso... avevo solo semplificato l'esempio postato)

@Marco: non ho certezze in merito ma credo si debba usare il lock anche se usi il costruttore; non vedo la differenza tra quel particolare metodo che è il costruttore ed un "normale" metodo statico (il mio GetInstance).
O mi sbaglio?

Matteo Casati
GURU4.net
Non avevo dubbi, ho inserito semplicemente una puntualizzazione, dato che magari la discussione viene letta anche da altri.

Ciao, Ricky.
Modificato da rickyvr il 23 marzo 2006 12.51 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
rickyvr ha scritto:
Non avevo dubbi, ho inserito semplicemente una puntualizzazione, dato che magari la discussione viene letta anche da altri.


 ...e hai fatto benissimo!

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.