.NET प्रोफाइलर एपीआई रनटाइम पर अवरोध विधियों का सबसे नज़दीकी "माइक्रोसॉफ्ट-अनुमोदित" तरीका है। जैसा कि पहले ही उल्लेख किया गया है, यह कार्यान्वित करने में कुछ मुश्किल है और मुझे पुस्तकालय से अवगत नहीं है जो पूरी तरह से प्रबंधित कोड का उपयोग करके इसे कार्यान्वित करना आसान बनाता है।
कुछ महीने पहले इस के लिए विकल्पों की खोज करते समय, मैंने CLR Method Injection पर ठोकर खाई, जो स्रोत कोड के साथ एक लेख है जो बताता है कि रनटाइम पर विधियों को कैसे रोकें। मैंने इसे स्वयं इस्तेमाल करने पर विचार किया, और यहां तक कि नमूना प्रोजेक्ट भी काम कर रहा था, लेकिन आखिरकार निष्कर्ष निकाला कि मुझे विधि अवरोध से अधिक की आवश्यकता है और उसे एक अलग समाधान की आवश्यकता होगी। हालांकि, यह दृष्टिकोण सीधे आपके प्रश्न का उत्तर देता है।
अन्त में, मैं क्या AfterthoughtPostSharp को एक खुला स्रोत विकल्प है, जो एक के बाद संकलन कदम के रूप में चलाता है और यदि आप अन्य कोड फोन या विधि कार्यान्वयन पूरी तरह बदलने के लिए मौजूदा तरीकों को संशोधित करने की अनुमति देता है के रूप में विकसित किया गया था कर समाप्त हो गया। मैं एक नया द्रव वाक्य रचना है, जो मैं अब का एक नमूना शामिल होंगे पर अभी काम कर रहा हूँ मदद करने के लिए आप देखते हैं कि कैसे इस AOP दृष्टिकोण अपनी जरूरतों को पूरा करेगा एक उदाहरण प्रदान करने के लिए:
Methods
.Named("Sum")
.WithParams<int[]>()
.Before((T instance, ref int[] values)
=> { var s = new Stopwatch(); s.Start(); return s; })
.After((instance, stopwatch, values)
=> instance.Result = (int)stopwatch.ElapsedMilliseconds);
इस मामले में, जबकि में संशोधन के लिए एक मौजूदा Sum
विधि के साथ टाइप करें मैं निष्पादन समय को मापने के लिए विधि से पहले और बाद में कोड प्रस्तुत कर रहा हूं। मूल संकलित वर्ग के खिलाफ आफ्टरथॉट चलाने के बाद, परिणामी Sum विधि में विधि लैब के पहले और बाद में इन लैम्ब्डा अभिव्यक्तियों को कॉल किया जाएगा (सी # कंपाइलर केवल उन्हें स्थिर तरीकों में बदल देता है)। मैं बस Implement
कहलाता था और पूरे विधि कार्यान्वयन को बदल सकता था।
मुझे आशा है कि इनमें से एक दृष्टिकोण आपकी आवश्यकताओं को पूरा करेगा। मेरे मामले में, मैं एओपी मार्ग चला गया क्योंकि मैं इंटरफेस को लागू करने, इंटरफेस को लागू करने, नए तरीकों/गुणों आदि को जोड़ने से अधिक करना चाहता था। मुझे कुछ ऐसा भी चाहिए जो रनटाइम पर निर्भरताएं पेश नहीं करेगा या स्थिरता या प्रदर्शन के बारे में चिंताओं को नहीं रनटाइम पर्यावरण - संकलन-समय प्रसंस्करण परीक्षण करने के लिए केवल सुरक्षित और आसान है।
स्रोत
2011-05-30 02:10:07
सवाल काफी दिलचस्प है। लेकिन मुझे नहीं लगता कि एक रास्ता है .. –