2008-10-09 15 views
44

मैंने आज पोस्टशर्प के बारे में Ayende's post देखा। मैंने कोड डाउनलोड किया और इसे आज़माया, और मैंने सोचा कि यह सबसे अच्छा, सबसे आसान तरीका है जिसे मैंने देखा है एओपी को संभालने के लिए।आईएल बुनाई क्या है?

अपनी पोस्ट में, आयुन्डे का कहना है कि पोस्टशर्प आईएल बुनाई के माध्यम से इसका जादू पूरा करता है। अब, कुछ अमूर्त स्तर पर मैं इसका अर्थ समझ सकता हूं, लेकिन मैं देखना चाहता था कि वहां एक और विस्तृत उत्तर दिया गया है या नहीं। दुर्भाग्य से, बहुत समय के लिए पहली बार, Google मेरे लिए खाली आया। और इसलिए मैंने सोचा कि यह स्टैक ओवरफ्लो के लिए एक अच्छा सवाल होगा (क्योंकि मैं कुछ साल से जेफ के ब्लॉग की सदस्यता ले रहा हूं और जानता था कि यह साइट अपनी बात कर रही है)।

तो आईएल बुनाई वास्तव में क्या है और यह कैसे पूरा किया जाता है?

उत्तर

7

आईएल बुनाई बाइटकोड बुनाई के लिए समान है। .NET एक मध्यवर्ती भाषा को संकलित करता है जो .NET clr द्वारा चलाया जाता है। आईएल बुनाई मूल रूप से मध्यवर्ती भाषा का विश्लेषण और परिवर्तन कर रही है। चूंकि यह उस स्तर पर किया जाता है, यह सभी .NET भाषाओं के लिए किया जा सकता है।

4

यदि आप इसके बजाय Google MSIL इंजेक्शन की सहायता कर सकते हैं तो इससे मदद मिल सकती है। यह लिंक PostSharp से है और यह इसे अच्छी तरह से समझाता है।

मेरी कंपनी ने हाल ही में प्रदर्शन निदान के लिए डायनाट्रेस नामक एक उत्पाद खरीदा है। यह तरीकों के आसपास उपकरण के लिए एमएसआईएल इंजेक्शन का उपयोग करता है। असल में यह आपकी विधि से पहले आईएल कोड जोड़ता है और विधि के बाद (मुझे यकीन है कि इसके मुकाबले इसमें बहुत कुछ है)।

और here प्रक्रिया में काफी शामिल है लेकिन अच्छी व्याख्या है।

+0

आपका दूसरा लिंक ('यहां') अब उपलब्ध नहीं है, संभवतः इसी मुद्दे को संग्रहीत किया गया है। क्या आप, दुर्घटना से, उस मुद्दे के वर्ष/महीने को याद करते हैं जिसका आप उल्लेख कर रहे थे? अग्रिम में धन्यवाद। – Thomas

+0

लिंक बैक अप है। मैंने इसे खोलने पर कुछ जानकारी जोड़ा। – Nebula

20

बुनाई एक मौजूदा कार्यक्रम में इंजेक्शन कार्यक्षमता की प्रक्रिया को संदर्भित करता है। यह कई स्तरों पर धारणात्मक किया जा सकता है:

  • स्रोत कोड बुनाई स्रोत कोड लाइनों डालेगी से पहले कोड संकलित किया गया है
  • आईएल (.NET के लिए) बुनाई विधानसभा
  • में आईएल निर्देश के रूप में कोड जोड़ता
  • बाईटकोड (जावा के लिए) बुनाई वर्ग फ़ाइल पर काम करता है, इन टिप्पणियों wrt AspectJ

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

+8

मूल निर्देश "बुनाई" मूल निष्पादन योग्य डिबगर्स में आम है। इंटेल x86 निर्देश सेट पर, उदाहरण के लिए, कोड में ब्रेकपॉइंट सेट करने के लिए लक्ष्य कोड में एक INT 3 ऑपोड डालना आवश्यक है। यह मूल निर्देश को ओवरराइट करता है, इसलिए आपको वहां मौजूद बाइट को भी सहेजना होगा और ब्रेकपॉइंट हिट होने के बाद इसे वापस रखना होगा ताकि कार्यक्रम सामान्य रूप से निष्पादित हो सके। हां, यह जटिल है, यही कारण है कि लेखन डिबगर्स एक दुर्लभ कला है। – dthorpe

+2

मैंने इस विषय पर कुछ लिंक एकत्र किए हैं: स्रोत कोड बुनाई http://www.tara.tcd.ie/handle/2262/1239; आईएल बुनाई http://www.gutgames.com/post/Creating-an-AOP-Library-in-Net-Part-1.aspx; बाइटकोड बुनाई http://www.eclipse.org/aspectj/doc/released/devguide/bytecode-concepts.html; पहलू # http://www.developerfusion.com/article/5307/aspect-oriented-programming-using-net/2/ –

+0

ध्यान दें कि जेरोनी ने टिप्पणी की टिप्पणी में, gutgames से पोस्ट।कॉम वास्तव में उप-वर्गीकरण का उपयोग कर एओपी को लागू करने के बारे में बात करता है, आईएल बुनाई नहीं। – JaCraig

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