2012-01-18 11 views
5

हम एक .NET अनुप्रयोग जहाँ हम बाहरी कोड विधानसभाओं ("प्लग इन") लोड निर्माण कर रहे हैं संभाल करने के लिए कैसे। इस बिंदु तक, हम इन असेंबली को एक (मुख्य) एप्लिकेशन डोमेन में लोड कर रहे थे।पार एप्लिकेशन डोमेन डेटा विनिमय

हम एक विधानसभा अनलोड करने के लिए के बाद यह लोड किया गया है सक्षम होने के लिए करना चाहते हैं।

यह अंत करने के लिए, हम एक प्रणाली है कि प्लगइन विधानसभाओं की मेजबानी के लिए, होगा पर उतार दिया जा करने के लिए एक अलग माध्यमिक AppDomain पैदा करेगा रचना कर रहे हैं।

समस्याओं हम इस दृष्टिकोण के साथ है:

  1. प्लगइन DLL (उदाहरण के लिए, लकड़हारा) मुख्य AppDomain में कक्षाओं के साथ बातचीत करने की आवश्यकता होगी।
  2. डेटा प्लगइन dll को भेजी जाने वाली जरूरी Serializable के रूप में चिह्नित या MarshalByRefObj से प्राप्त नहीं है।

क्या ऐसे मामलों में आवेदन को विभाजित करने का कोई सामान्य अभ्यास है? सबसे अच्छा समाधान क्या है जिसके लिए हम जा सकते हैं?

एक और दिलचस्प सवाल - एक वस्तु से प्राप्त करने के क्यों करता MarshalByRef एक विशेषता से भी जाना जाता नहीं है और हमें मजबूर करता?

+1

'हम एक विधानसभा अनलोड करने के लिए सक्षम होने के लिए चाहते हैं के बाद यह किया गया है loaded' http://stackoverflow.com/questions/6258160/unloading-the-assembly-loaded-with-assembly-loadfrom 1. बीच सहभागिता करने के लिए अलग AppDomains आप शायद दूरस्थ माध्यम से यह करने के लिए की आवश्यकता होगी। 2. एक बयान है, तो आप उस 2 प्रश्न को स्पष्ट करने के लिए संपादित कर सकता है –

उत्तर

3

AppDomains भर में संवाद करने के लिए सबसे आसान तरीका AppDomain.CreateInstanceAndUnwrap उपयोग करने के लिए है। यह आपको किसी अन्य ऐपडोमेन में किसी ऑब्जेक्ट को तुरंत चालू करने और उस ऑब्जेक्ट पर प्रॉक्सी लौटने की अनुमति देगा। प्रॉक्सी से आप ऐप डोमेन पर प्रभावी रूप से विधि कॉल कर सकते हैं।

अपने वर्तमान कक्षाएं MarshalByRef का विस्तार नहीं है, तो आप एक पुल वर्ग करता है बनाना चाहिए और गो-बीच के रूप में कार्य कर सकते हैं।

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