2012-11-02 11 views
5

साथ कक्षा में सभी तरीकों लपेट होगा मैं एक विशेषता HandleError कि मैं इस तरह एक वर्ग पर डाल दिया जाएगा बनाने के लिए करना चाहते हैं:विशेषता है कि कोशिश {} पकड़

[HandleError] 
public class Foo 
{ 
    public void Do(){} 
... 
    public void Don(){} 
} 

और यह कोशिश में सभी तरीकों लपेटो जाएगा पकड़ो, तो मेरा मानना ​​है कि यह ऐसा कुछ होना चाहिए:

public class HandleErrorAttribute : Attribute 
{ 
    public void Execute() 
    {  
     try 
     { 
      method.Execute(); 
     } 
     catch(Exception ex) 
     { 
      //log 
     } 
    } 
} 

क्या यह संभव है?

+1

, नहीं। हालांकि एओपी पुस्तकालयों में से एक के साथ यह संभव हो सकता है। http://www.sharpcrafters.com/aop.net – asawyer

+0

यह गुण नहीं है। @asawyer नोट्स के रूप में, पोस्टशर्प इसे अनुमति दे सकता है; और भविष्य के संस्करणों में, कंपाइलर रीराइट (उर्फ रोज़लिन) के विस्तार के रूप में इस तरह की चीज संभव हो सकती है; लेकिन फिलहाल: –

+0

@MarcGravell, क्या आपको लगता है कि यह Roslyn के कारण बनाया जाएगा या आपको लगता है कि हमें इसके लिए एक ओपन सोर्स प्रोजेक्ट बनाना होगा? –

उत्तर

3

आप पोस्टशर्प जैसे कुछ ढूंढ रहे हैं, और यह लागू करने योग्य है। हालांकि, कार्यान्वयन इस प्रश्न के दायरे से काफी दूर है। इस link पर एक नज़र डालें, आप देखेंगे कि यह वही कर रहा है जो आप चाहते हैं।

तो, पोस्टशर्प डाउनलोड करें, इसके साथ शुरुआत करें, और यदि आपके पास इसके बारे में अधिक प्रश्न हैं तो हम आपकी मदद करने में सक्षम होंगे। हालांकि, उनके दस्तावेज बेहद अच्छे हैं और यह केक लागू करना है।

[Serializable] 
public class MyExceptionHandling : OnMethodBoundaryAspect 
{ 
    public override void OnException(MethodExecutionArgs args) 
    { 
     // here you would perform the logging 
    } 
} 

फिर अपने विधि पर आप इसे को चिह्नित करना होगा नई विशेषता के साथ:

public class Foo 
{ 
    [MyExceptionHandling] 
    public void Do(){} 
    [MyExceptionHandling] 
    public void Don(){} 
} 
वर्तमान ढांचे के साथ
+0

तो पोस्टशर्प का उपयोग करके यह विशेषता कैसे लिखी जाएगी? – Omu

+0

@ चकनॉरिस, 'ऑनएक्सप्शन' विधि को लागू करके इसे पोस्टशर्प द्वारा 'ट्राई-कैच' ब्लॉक में लपेटा जाता है ताकि पोस्टशर्प आपको इसे संभालने की अनुमति दे सके। –

+0

ठीक है, तो अगर ऑनएक्सप्शन के अंदर फेंक नहीं है, तो अपवाद आगे नहीं बढ़ेगा – Omu

संबंधित मुद्दे