2011-01-19 4 views
5

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?

+1

Nie znam odpowiedzi na konkretne pytanie, ale czy rozważałeś zamiast tego używanie [PostSharp] (http://sharpcrafters.com)? –

+1

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

+0

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

Odpowiedz

5

Używam tego:

try 
{ 

} 
catch (Exception ex) 
{ 
    My.API.ErrorHandler.Handler.HandleError(ex, 
     System.Reflection.MethodBase.GetCurrentMethod().Name, 
     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); 
} 

Oto kod na fragmencie:

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>Try Catch</Title> 
     <Shortcut>try</Shortcut> 
     <Description>Places a try catch block with My API error handling</Description> 
     <Author>Nathan Freeman-Smith</Author> 
    </Header> 
    <Snippet> 
     <Code Language="csharp"><![CDATA[   try 
      { 

      } 
      catch (Exception ex) 
      { 
       My.API.ErrorHandler.Handler.HandleError(ex, System.Reflection.MethodBase.GetCurrentMethod().Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); 
      }]]></Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets> 

Zanotuj Skrót tag "try" w jej wnętrzu.
Oznacza to mogę wykorzystać fragment wpisując spróbować w visual studio, aby wstawić fragment, lub oznakowanie kawałek kodu i otaczają go z tego snippt za pomocą Ctrl + K Ctrl + S (deafult Keyboard Shourtcut)

8

MethodInfo.GetCurrentMethod().Name poda nazwę aktualnie wykonywanej metody. Zastrzeżenie: anonimowe metody dadzą ci śmieci jako nazwę.

+0

thax Darin. Potrzebuję jeszcze jednej rzeczy, dowolnego innego linku lub samouczka na temat fragmentów kodu, innych niż MSDN. –

+0

"śmieci" - jest nadal unikalny i można go użyć, aby uzyskać typ własności. – Gusdor

Powiązane problemy