2011-01-19 27 views
5

Tôi đang phát triển một ứng dụng trong ASP.Net 4.0 với C# nơi tôi đang ghi nhật ký và truy tìm bằng cách sử dụng Enterprise Lib của Microsoft. Vấn đề của tôi là hầu như trong mọi chức năng, theo hướng dẫn của công ty tôi, nơi có tương tác với cơ sở dữ liệu hoặc một số quy tắc kinh doanh quan trọng, hãy sử dụng truy tìm, theo định dạng này.Cách lấy tên phương thức tự động trong Đoạn mã trong 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()); 
} 

Vì vậy, những gì tôi muốn là chuyển đổi nó thành đoạn mã sẽ tự động phát hiện phương pháp hiện tại, như trong trường hợp trên chúng tôi có XYZ().

Hãy giúp tôi. Cũng cho tôi biết cách để thêm này vào intellisense. Ngay bây giờ tôi có thể tạo tập tin .snippet và sử dụng đoạn mã chèn từ menu ngữ cảnh.

Cập nhật

Tôi nghĩ rằng tôi không rõ ràng với các bạn. Hãy để tôi làm rõ hơn. tôi có một đoạn mã

<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> 

Ví dụ, nếu phương pháp của tôi là

void XYZ() 
{ 
    // when i insert snippet here , the snippet will automatically detect 

rằng đoạn mã này sẽ được đặt dưới chức năng XYZ.

try 
       { 
        _traceLog.Clear(); 
        _traceLog.AppendLine("XYZ started: XYZ()"); 

// ở bên cạnh dòng nối thêm tôi muốn lấy tên phương thức theo mà tôi đang đặt đoạn mã.

   _traceLog.AppendLine("XYZ completed: XYZ()"); 
       } 
       catch (Exception ex) 
       { 

        _userExceptionLog.CreateExceptionLog(ex); 
       } 
       finally 
       { 
        _userExceptionLog.CreateTraceLog(_traceLog.ToString()); 
       } 

} 

Điều này có khả thi không? hoặc tôi phải nhập nó bằng tay hoặc bất kỳ cách nào khác ngắn?

+1

Tôi không biết câu trả lời cho câu hỏi cụ thể của bạn, nhưng bạn có cân nhắc sử dụng [PostSharp] (http://sharpcrafters.com) thay thế không? –

+1

Tôi sẽ đề nghị bạn đề nghị rằng đăng nhập, nhưng không xử lý (tức là tiếp tục như thể nó đã không xảy ra) mỗi ngoại lệ là * không * một ý tưởng tốt. – Richard

+0

Richard đúng. Bạn đang 'nuốt' ngoại lệ, đó là thực hành rất xấu. Cách tiếp cận tốt hơn là không đăng nhập ở cấp độ đó và cho phép ngoại lệ bong bóng, và đăng nhập chúng ở cấp cơ sở của ứng dụng (ví dụ, trong sự kiện 'Application_Error' của global.asax của ASP.NET) ứng dụng web). – Steven

Trả lời

5

tôi sử dụng này:

try 
{ 

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

Đây là mã cho đoạn:

<?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> 

Lưu ý Shortcut tag với "thử" bên trong của nó.
Điều đó có nghĩa là tôi có thể sử dụng đoạn mã bằng cách nhập thử trong studio trực quan để chèn đoạn mã hoặc đánh dấu đoạn mã và bao quanh đoạn mã bằng cách sử dụng Ctrl + k, Ctrl + S (Deafult Keyboard Shourtcut)

8

MethodInfo.GetCurrentMethod().Name sẽ cung cấp cho bạn tên của phương pháp hiện đang thực thi. Caveat: các phương thức nặc danh sẽ cung cấp cho bạn tên rác.

+0

thích Darin. Tôi cần thêm một điều nữa, bất kỳ liên kết hoặc hướng dẫn nào khác về Đoạn mã, ngoài đoạn mã MSDN. –

+0

"rác" - nó vẫn là duy nhất và bạn có thể sử dụng nó để có được kiểu sở hữu. – Gusdor

Các vấn đề liên quan