Voici une liste de bonne classe singleton thread-safe j'utiliser:
namespace Helpers.DesignPatterns
{
public class Singleton<T> where T : class
{
private static volatile T _instance;
private static object _syncRoot = new Object();
protected Singleton()
{
}
private static T CreateInstance()
{
ConstructorInfo cInfo = typeof(T).GetConstructor(
BindingFlags.Instance | BindingFlags.NonPublic,
null,
new Type[0],
new ParameterModifier[0]);
return (T)cInfo.Invoke(null);
}
/// <summary>
/// Точка входа синглтона
/// </summary>
public static T Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = CreateInstance();
}
}
return _instance;
}
}
}
}
Il est extrêmement simple de créer la classe derieved:
class CredentialsManager : Singleton<CredentialsManager>
Mais généralement, ce n'est pas un très bon solution pour avoir plus d'une classe singleton dans le projet. J'ai 4 dans le mien :)
pourquoi ferez-vous cela? –
C'est possible jusqu'à ce que votre classe ne soit pas "scellée" – wudzik
C'est au développeur qui crée/utilise la classe dérivée. Si vous ne leur faites pas vraiment confiance, ne leur permettez pas d'hériter de votre classe. – aroth