It has been a while since I needed to develop a singleton in .NET, and now that I am working in .NET 4, I thought it was a good time to revisit the implementation and take advantage of new language features.

So without much fanfare, here it is:

 1Public NotInheritable Class MySingleton
 2 
 3#Region " Thread-Safe Lazy Singleton "
 4 
 5    Private Shared _instance As Lazy(Of MySingleton) = New Lazy(Of MySingleton)(Function() New MySingleton())
 6 
 7    ''' <summary>
 8    ''' Hide the constructor
 9    ''' </summary>
10    ''' <remarks></remarks>
11    Private Sub New()
12        ' nothing to do
13    End Sub
14 
15    ''' <summary>
16    ''' Singleton instance
17    ''' </summary>
18    ''' <value></value>
19    ''' <returns></returns>
20    ''' <remarks></remarks>
21    Public Shared ReadOnly Property Instance As MySingleton
22        Get
23            Return _instance.Value
24        End Get
25    End Property
26 
27#End Region
28 
29End Class

The .NET 4 Lazy class by default ensures that the singleton is thread-safe.

If you use the Lazy class and do not pass in any parameters, it will construct the type automatically for you… which means that the class must have a public constructor method with no parameters. By passing a value factory delegate into the constructor of the Lazy class, we can keep our constructor private and thereby force others to use our Instance property and truly make a Singleton.

Please leave below any comments, feedback or suggestions, or alternatively contact me on a social network.

comments powered by Disqus