1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
/// <summary>
/// Stockage des différentes instance de managers, utilisées chacune par un thread
/// </summary>
protected static Dictionary<int, T> managers = new Dictionary<int, T>();
/// <summary>
/// Instance unique du manager pour toute la durée de vie du thread courant
/// </summary>
public static T Instance
{
get
{
int threadId = Thread.CurrentThread.ManagedThreadId;
lock (managers)
{
if (!managers.ContainsKey(threadId))
{
managers.Add(threadId, new T());
}
return managers[threadId];
}
}
}
/// <summary>
/// Libération de l'instance liée au thread courant
/// </summary>
internal static void LibererInstance()
{
int threadId = Thread.CurrentThread.ManagedThreadId;
lock (managers)
{
if (managers.ContainsKey(threadId))
{
managers.Remove(threadId);
}
}
} |