Delegates et events dans singleton

Le
Delf
Bonjour.

J'ai une classe singleton : LoggerManager.

Ce singleton permet de maintenir en mémoire N Loggers qui sont
initialisés à partir d'un fichier <assemblyName>.dll.config.

Exemple d'utilisation :

LoggerManager.WriteLine("Core", LevelEnum.Debug, "CCore::Run",
"Debug");

Via cette méthode, je récupère en interne le Logger ayant pour ID
"Core" et je fais le traitement WriteLine().

Chaque Logger a un évènement : OnWriteLine.

public delegate void WriteLineHandler(LoggerEventArgs e);

Et dans le code qui va lever l'évènement :

if (bWritten && this.OnWriteLine != null)
{
this.OnWriteLine(new LoggerEventArgs(m_Id, currentDateTime,
pLevel, pEntryPoint, pMessage));
}

J'ai donc ajouter une méthode au niveau de mon singleton pour "fixer"
un traitement sur cet event :

public static void SetWriteLineEvent(string pId,
Framework.IO.Logger.WriteLineHandler pCallback)
{
if (m_Loggers.ContainsKey(pId))
{
m_Loggers[pId].OnWriteLine += new WriteLineHandler(pCallback);
}
}

Ça fonctionne parfaitement.

J'ai aussi fait la méthode inverse de détachement :

public static void UnsetWriteLineEvent(string pId,
Framework.IO.Logger.WriteLineHandler pCallback)
{
if (m_Loggers.ContainsKey(pId))
{
m_Loggers[pId].OnWriteLine -= new WriteLineHandler(pCallback);
}
}

Ce point ne fonctionne pas j'intercepte toujours l'event :
OnWriteLine n'est jamais 'null'.
Je n'y comprends plus rien.

Toute indication sera la bienvenue, merci.

--
Delf
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Delf
Le #15327411
On 10 juil, 12:09, Delf
[...]

Ça fonctionne parfaitement.

J'ai aussi fait la méthode inverse de détachement :

public static void UnsetWriteLineEvent(string pId,
Framework.IO.Logger.WriteLineHandler pCallback)
{
    if (m_Loggers.ContainsKey(pId))
    {
        m_Loggers[pId].OnWriteLine -= new WriteLineHandler(pCal lback);
    }

}

Ce point ne fonctionne pas... j'intercepte toujours l'event :
OnWriteLine n'est jamais 'null'.
Je n'y comprends plus rien.



Personne pour m'aider ?

--
Delf
Delf
Le #16360751
Je poste un peu plus de code.

LoggerManager.cs
---------------------------------------------------------------

using System;
using System.IO;
using System.Xml;

namespace Framework.IO.Logger
{
public class LoggerManager : LoggerManagerContext
{
private readonly static LoggerManager m_Instance = new
LoggerManager();

private LoggerManager() : base()
{
}

public static LoggerManager Instance
{
get
{
return m_Instance;
}
}
}
}

LoggerManagerContext.cs
---------------------------------------------------------------

using System;
using System.Xml;

namespace Framework.IO.Logger
{
public class LoggerManagerContext
{
private Loggers m_Loggers = null;

public LoggerManagerContext()
{
//...
}

public void SetWriteLineEvent(string pId,
Framework.IO.Logger.WriteLineHandler pCallback)
{
if (!this.IsEnabled)
{
Logger logger = m_Loggers[pId];

if (logger != null)
{
logger.OnWriteLine += new
WriteLineHandler(pCallback);
}
}
}

public void UnsetWriteLineEvent(string pId,
Framework.IO.Logger.WriteLineHandler pCallback)
{
if (!this.IsEnabled)
{
Logger logger = m_Loggers[pId];

if (logger != null)
{
logger.OnWriteLine -= new
WriteLineHandler(pCallback); // Ca ne fonctionne pas...
}
}
}
}
}
Delf
Le #16367051
Delf a utilisé son clavier pour écrire :

Je poste un peu plus de code.

[...]



Pas la même instance.
Résolu par :

logger.OnWriteLine += pCallback;

logger.OnWriteLine += pCallback;

--
Delf
Publicité
Poster une réponse
Anonyme