Nel mio articolo "L'individuazione via reflection delle classi singleton all'interno del Framework .NET" - grazie per il rating 4,70 :-) - trovavo le seguenti 3 classi singleton:
- Microsoft.JScript.Empty
- Microsoft.JScript.Missing
- System.DBNull
e finivo l'articolo con una mia perplessità:
"Giocando con vari test e cambiando leggermente i requisiti di implementazione ho scoperto che la classe System.Reflection.Missing ha il costruttore internal anziché private, per il resto è un singleton puro. Mi chiedo se si tratta di una disattenzione da parte degli sviluppatori del Framework oppure se è stata pensata come singleton solo all'esterno del Framework. Un caso simile è quello della classe interna System.Empty dove di nuovo il costruttore risulta internal."
su queste altre due classi:
- System.Reflection.Missing
- System.Empty.
Adesso, con la nuova versione del Framework (v2.0.40607), ho riprovato a vedere i risultati del mio codice e ho scoperto che avevo ragione :-) Nella versione v1.1.4322, System.Reflection.Missing e System.Empty erano dei singleton "mascherati" (adesso sono singleton come tutti gli altri!). Inoltre hanno aggiunto anche questi 5, nuovi:
- System.Data.Odbc.OdbcFactory
- System.Data.OleDb.OleDbFactory
- System.Data.ProviderBase.DbConnectionPoolIdentity
- System.Data.SqlClient.SqlClientFactory
- System.Data.OracleClient.OracleClientFactory
Come nell'altro post, scopro quindi che, a parte le novità più visibili, hanno messo a posto delle piccole cose che non erano proprio perfette. Bello.