Estoy buscando una forma de agregar y eliminar un TraceListener para todos los TraceSources existentes.agregar/eliminar TraceListener a todos los TraceSources
(No estoy seguro de que mi enfoque sea correcto aquí, ¿qué otras formas podría usar? Básicamente quiero registrar todas las salidas de rastreo en un archivo que use el nombre del proyecto actual como nombre de archivo. Siempre que un usuario cree o vuelva a abrir proyecto, quiero añadir registros al archivo correcto Sólo puede haber un proyecto abierto a la vez)
Código ejemplo:..
puedo crear varios TraceSources en mi solicitud, una para cada clase
public class Class1
{
private static readonly System.Diagnostics.TraceSource trace =
new System.Diagnostics.TraceSource("Class1");
}
public class Class2
{
private static readonly System.Diagnostics.TraceSource trace =
new System.Diagnostics.TraceSource("Class2");
}
Ahora desea agregar o quitar un TraceListener a todos mis traceSources en tiempo de ejecución, así:
private System.Diagnostics.TextWriterTraceListener myListener;
private onProjectOpen()
{
// user created a new project or opened an existing one
myListener = new System.Diagnostics.TextWriterTraceListener("log-"+projectname+".log");
ALL_TRACESOURCES.Add (myListener) ; // <-- how to do this?
}
private onProjectClose()
{
// user closed a project
ALL_TRACESOURCES.Remove(myListener) ; // <-- how to do this?
myListener.Flush();
myListener.Close();
myListener.Dispose(); // <-- not sure if all this is neccessary
}
Hasta el momento no he encontrado ninguna manera de hacer esto sin hacer todos mis traceSources pública (que parece una mala idea) y luego enumerando todas mis clases de esta manera:
Class1.Trace.Add(myListener);
Class2.Trace.Add(myListener);
...
que parece una mala elección de diseño en varios niveles.
O
Añadir todos mis TraceSources a una colección personalizada global en el constructor de cada clase (fácil de olvidar/meter la pata, y las variables globales son malas)
¿Hay una mejor manera? Básicamente estoy buscando una manera de establecer otro oyente predeterminado
Esto sólo se consigue TraceSources que han creado una instancia. Si hubiera una manera de hacer de esto una colección observable, entonces estaríamos cocinando con gasolina. – BozoJoe