Ecrit par
Delf le jeudi 10 juillet 2008 dans le thème :
C#
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 .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
Classé sous : onwriteline,
pid,
loggers,
writelinehandler,
singleton