Estoy desarrollando una aplicación en ASP.Net 4.0 con C# en la que estoy haciendo el registro y el seguimiento utilizando Enterprise Lib de Microsoft. Mi problema es que casi en cada función, según la guía de mi compañía, donde hay interacción con la base de datos o algunas reglas comerciales críticas, use el rastreo, en este formato.Cómo obtener el nombre del método automáticamente en el fragmento de código en C# 4.0
try
{
_traceLog.clear();
_traceLog.AppendLine("XYZ method started: XYZ()");
_traceLog.AppendLine("XYZ method completed: XYZ()");
}
catch(Exception ex)
{
_userException.CreateExceptionLog(ex);
}
finally
{
_userException.CreateTraceLog(_traceLog.ToString());
}
Así que lo que quiero es convertir como un fragmento de código que detectará automáticamente el método actual, por ejemplo en el caso anterior tenemos XYZ().
Por favor, ayúdame. También dime la forma de agregar esto a intellisense. Ahora mismo puedo crear un archivo .snippet y uso el fragmento de inserción desde el menú contextual.
actualizar
Creo que no me queda claro a ustedes. Déjame hacer más claro. tengo un fragmento de código
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2010/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>
TL
</Title>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[ try
{
_traceLog.Clear();
_traceLog.AppendLine(""); // here in side the append line i want to get name of method under which i am placing code snippet.
_traceLog.AppendLine("");
}
catch (Exception ex)
{
_userExceptionLog.CreateExceptionLog(ex);
}
finally
{
_userExceptionLog.CreateTraceLog(_traceLog.ToString());
}]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Por ejemplo, si mi método es
void XYZ()
{
// when i insert snippet here , the snippet will automatically detect
que este fragmento va a ser incluida en la función XYZ.
try
{
_traceLog.Clear();
_traceLog.AppendLine("XYZ started: XYZ()");
// aquí en el lado de la línea append quiero obtener el nombre del método en el que estoy poniendo fragmento de código.
_traceLog.AppendLine("XYZ completed: XYZ()");
}
catch (Exception ex)
{
_userExceptionLog.CreateExceptionLog(ex);
}
finally
{
_userExceptionLog.CreateTraceLog(_traceLog.ToString());
}
}
¿Esto es posible? o tengo que ingresarlo manualmente o de otra manera?
No sé la respuesta a su pregunta específica, pero ¿ha considerado utilizar [PostSharp] (http://sharpcrafters.com) en su lugar? –
Sugeriría que sugiera que el registro, pero no el manejo (es decir, continúe como si no sucediera), cada excepción es * no * una buena idea. – Richard
Richard tiene razón. Estás 'tragando' excepciones, lo cual es una muy mala práctica. Un mejor enfoque es no iniciar sesión en ese nivel y dejar que las excepciones salgan a relucir, y registrarlas en el nivel raíz de la aplicación (por ejemplo, en el evento 'Application_Error' del archivo.asax global de nosotros ASP.NET Aplicación web). – Steven