Zajmuję się tworzeniem aplikacji w ASP.Net 4.0 z C#, gdzie robię logowanie i śledzenie przy użyciu Enterprise Lib firmy Microsoft. Mój problem polega na tym, że prawie w każdej funkcji, zgodnie z wytycznymi mojej firmy, w których występuje interakcja z bazą danych lub niektórymi krytycznymi regułami biznesowymi, należy używać śledzenia w tym formacie.Jak uzyskać nazwę metody automatycznie w Fragmentie kodu w 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());
}
Więc co chcę jest, aby przekształcić go w postaci fragmentu kodu, który będzie automatycznie wykrywać bieżącą metodę, na przykład w powyższym przypadku mamy XYZ().
Proszę, pomóż mi. Powiedz mi również, jak dodać to do intellisense. Teraz mogę utworzyć plik .snippet i użyć fragmentu wulgaryzmu z menu kontekstowego.
UPdate
Myślę, że nie jestem dla was jasny. Pozwól mi wyjaśnić. Mam fragment kodu
<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>
Na przykład, jeśli moja metoda jest
void XYZ()
{
// when i insert snippet here , the snippet will automatically detect
że ten fragment ma być objęty funkcją XYZ.
try
{
_traceLog.Clear();
_traceLog.AppendLine("XYZ started: XYZ()");
// tutaj w bok linia append chcę uzyskać nazwę metody pod której jestem umieszczenie fragmentu kodu.
_traceLog.AppendLine("XYZ completed: XYZ()");
}
catch (Exception ex)
{
_userExceptionLog.CreateExceptionLog(ex);
}
finally
{
_userExceptionLog.CreateTraceLog(_traceLog.ToString());
}
}
Czy to możliwe? lub muszę wprowadzić go ręcznie lub w jakikolwiek inny sposób?
Nie znam odpowiedzi na konkretne pytanie, ale czy rozważałeś zamiast tego używanie [PostSharp] (http://sharpcrafters.com)? –
Proponuję zasugerować, aby rejestrowanie, ale nie przetwarzanie (tj. Nadal tak, jakby się nie stało) każdy wyjątek jest * nie * dobrym pomysłem. – Richard
Richard ma rację. Wyjątki są "połykaniem", co jest bardzo złą praktyką. Lepszym rozwiązaniem jest nie logować się w ogóle na tym poziomie i pozwolić wyjątkom się spieprzyć i zalogować je na poziomie katalogu głównego aplikacji (na przykład w zdarzeniu "Application_Error" z global.asax nas ASP.NET Aplikacja internetowa). – Steven