Disponibile la Beta 2 del framework .NET 4 su Windows Update
La nuova versione del framework .NET (la quattro, per intenderci) è in beta testing pubblico, disponibile per il download: per chi lo desiderasse è possibile scaricare la beta 2 del nuovo framework direttamente da Windows Update. Per abilitare l'aggiornamento è sufficiente aggiunge un'apposita chiave di registro eseguendo questo comando:
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4B2WU" /v OptIn /t REG_DWORD /d 1 /f
L'aggiornamento non verrà scaricato, però, se avete già altre versioni beta del framework 4 installate sulla vostra macchina.
C# Singleton
In questi ultimi mesi ho avuto la necessità di trovare un'implementazione del pattern singleton in C# che fosse un buon compromesso tra scarnezza del codice e laziness nella creazione dell'istanza.
Dopo un pò di ricerche ed esperimenti ho scelto la soluzione di seguito:
public sealed class MyObject
{
// Dichiaro un costruttore statico per far si che il compilatore c# non
// consideri il tipo come beforefieldinit
static MyObject() { }
MyObject() { }
// Istanza privata dell'oggetto
private static readonly MyObject _instance = new MyObject();
// Proprietà pubblica che espone l'istanza all'esterno
public static MyObject Instance
{
get { return _instance; }
}
}
Il costruttore statico garantisce che l'implementazione sia thread-safe: in questo modo l'inizializzazione dell'istanza _instance viene eseguita una sola volta per esecuzione. Inoltre per la presenza dello stesso costruttore statico la classe non viene marcata con il flag beforefieldinit dal compilatore, l'oggetto _instance viene quindi istanziato solamente alla primo accesso ad una proprietà statica di MyObject.
Se avete la necessità di un'implementazione thread safe potete modificare la proprietà pubblica come segue:
public sealed class MyObject
{
static MyObject() { }
MyObject() { }
private static readonly MyObject _instance = null;
public static MyObject Instance
{
get
{
lock(_instance)
{
if (_instance == null) _instance = new MyObject();
return _instance;
}
}
}
}
Cosa ne pensate di queste soluzioni? Avete individuato dei problemi a cui non ho fatto caso? Aspetto i vostri suggerimenti a riguardo nei commenti
Design Patterns in ASP.NET
Riporto un interessante articolo sull'utilizzo dei design pattern in ASP.NET. L'autore presenta alcuni dei pattern che ritiene più utili nello sviluppo di applicazioni in ASP.NET e quindi ne presenta degli esempi di utilizzo.
I diversi pattern sono raggruppati e presentati al lettore secondo questa tassonomia:
- Presentation Logic
- Model-View-Controller (MVC)
- Model-View-Presenter (MVP)
- Use Case Controller
- Host or Behavioral
- Command
- Publish-Subscribe / Observer
- Plug-in / Module / Intercepting Filter
- Structural
- Service Agent / Proxy / Broker
- Provider / Adapter
- Creational
- Factory / Builder / Injection
- Singleton
- Persistence
- Repository
Sono certo che potrete trovare anche voi queste due pagine interessanti. Buona lettura!
Rispondere con 404 in ASP.NET
In Tizio&Caio ci sono diversi tipi di risorse che vengono realizzate e pubblicate per gli utenti sul sito: molte di queste, per assicurarne la qualità, richiedono di essere validate da un altro membro dello staff diverso dal creatore.
Durante questa fase la risorsa è realmente esistente all'URL in cui si troverà, ma la sua visualizzazione è limitata al solo staff, per le ragioni che ho spiegato prima. Per evitare che qualche utente malizioso possa andare alla ricerca di queste risorse facciamo in modo che, se il visitatore manca delle necessarie autorizzazioni non visualizzi un generico errore di accesso, ma un bel 404.
Fortunatamente non c'è alcun bisogno di andare a smanettare con la sezione customErrors del web.config, è sufficiente generare una HttpException:
throw new HttpException(404, "Page not found");
Il runtime di ASP.NET rileverà l'eccezione e si occuperà del redirect alla opportuna pagina per l'errore 404.
C# vs. Ruby
Google Trends (per chi ha tempo di giochicchiarci un pò) può offrire degli interessanti spunti di riflessione...

Io mi sono fatto l'idea che c# è un linguaggio per lavorare, mentre ruby è ancora un qualcosa da smanettoni... Qui la fonte ed altre interessanti opinioni.