मेरे पास एक प्रणाली है जो भागों को लोड करने के लिए एमईएफ का उपयोग करती है। इनमें से प्रत्येक भाग कोर लाइब्रेरी पर भरोसा करता है। इसके अलावाएमईएफ निर्भरता और संस्करण
- part1-1.0.0.0.dll
- part2-1.0.0.0.dll
,: जब मैं इस परियोजना का निर्माण, मैं इस तरह .dll फ़ाइलों के लिए एक संस्करण संख्या को जोड़ने एक ऐसा एप्लीकेशन है जो एमईएफ संरचना करता है। यह कोर लाइब्रेरी का भी उपयोग करता है। मैंने पाया है कि मैं केवल "भाग" डीएलएस को तैनात कर सकता हूं, और रचना ठीक काम करती है क्योंकि एप्लिकेशन पहले ही कोर लाइब्रेरी को लोड कर चुका है जिस पर भाग भरोसा करते हैं।
- /parts/part1-v1.dll
- /parts/part2-v1.dll
- संगीतकार-v1.exe
- कोर-v1.exe: तो मेरी फाइल सिस्टम इस तरह दिखता है
मेरी समस्या यह है कि कोर और भागों के संस्करण को कैसे संभालना है। मान लीजिए कि मैं कोर, और भागों में से एक को अद्यतन करता हूं। फिर, मैं परिवर्तनों को तैनात करता हूं।
- /parts/part1-v1.dll
- /parts/part1-v2.dll
- /parts/part2-v1.dll
- संगीतकार: तो अब मेरी फाइल सिस्टम की तरह कुछ लग सकता है -v1.exe
- कोर-v1.dll
- कोर-v2.dll
मुझे यकीन है कि part1-v1.dll कोर-v1.dll, और part1-v2.d का उपयोग करता है बना सकते हैं कैसे कोर-v2.dll का उपयोग करेंगे? मुझे भागों के सभी संस्करणों को लोड करने और कोर के उपयुक्त संस्करण का उपयोग करने की आवश्यकता है।
[Export(typeof(IPart))]
public class Part1
{
public string GetSomethingFromCore()
{
return Core.GetSomethingFromCore();
}
}
[Export(typeof(IPart))]
public class Part2
{
public string GetSomethingFromCore()
{
return Core.GetSomethingFromCore();
}
}
मैं इस दृष्टिकोण को वापस लेगा। ध्यान दें कि कैसे विम ने इंटरफेस के लिए 'कोर' कार्यक्षमता को सारणीबद्ध किया है, यह विशेष रूप से महत्वपूर्ण है क्योंकि लांस के दिए गए उदाहरण में, वह 'कोर' को संदर्भित करता है, इसलिए भाग 1 और भाग 2 वास्तव में अलग-अलग स्थिर सिंगलटन का संदर्भ दे रहा है, जो आम तौर पर नहीं होगा अपेक्षित् व्यवहार। इंटरफ़ेस की कार्यक्षमता को सारणीबद्ध करके, 'कोर' तर्क वास्तव में सिंगलटन _instances_ हो सकते हैं, वही ऑब्जेक्ट, जो इंटरफेस के दो अलग-अलग संस्करण (आईसीओआरवी 1, और आईसीओआरवी 2) के माध्यम से कार्यक्षमता प्रकाशित करता है। – Adam
सभी माइक्रोसॉफ्ट ऑफिस इंटरऑप असेंबली पर एक नज़र डालें, और ध्यान दें कि उनके पास v8, v9, v10 dlls आदि (नामस्थान में संस्करण के साथ) कैसे हैं। प्रत्येक नए संस्करण _does_not_ अंतिम से कार्यक्षमता को फिर से परिभाषित करता है, लेकिन बस _adds_ पर।) ICorev1, ICorev2 { ICorev1.GetSomethingFromCore ( {} ICorev2.GetSomethingFromCore2 (: आंतरिक वर्ग कोर: तो, एक रखरखाव के नजरिए से, अपने 'कोर' कार्यान्वयन (समय के साथ) इस (स्यूडोकोड) कुछ ऐसा दिखाई देगा) {} } – Adam