2011-01-24 4 views
7

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

हालांकि, वहाँ एक की जरूरत कस्टम कोड जोड़ने कभी कभी है, इसलिए मैं 3 पार्टियों लिखने के लिए अनुमति देकर कोड विस्तार के बारे में सोचा और अपने स्वयं के कोड को एम्बेड:

OnCreating OnCreated OnUpdating OnUpdated

क्या उपरोक्त कई असेंबली को सक्षम करने का कोई तरीका है? एमईएफ यहां मदद कर सकता है?

आप अपने उत्तर के लिए सादर


धन्यवाद सभी को धन्यवाद।

ऐसा इंटरफ़ेस होने का अर्थ है कि प्रत्येक बाह्य असेंबली को आवश्यकतानुसार उस इंटरफेस को कार्यान्वित करना होता है। फिर, मेरे एप्लिकेशन के कोड को वर्तमान में चल रहे असेंबली के माध्यम से लूप की आवश्यकता है, उस इंटरफेस को लागू करने वाले सभी वर्गों का पता लगाएं, और अपनी विधियों को चलाएं?

क्या एमईएफ यहां फिट है? मैं बाहरी असेंबली से कार्यान्वयन निर्यात कर सकता हूं और उन्हें अपने ऐप के अंदर आयात कर सकता हूं?

धन्यवाद सादर

उत्तर

2
अपने MEF सवाल के बारे में

, तो आप शायद एक अंतरफलक से तरीकों को चलाने के लिए निम्नलिखित की तरह कुछ कर सकता है:

var catalog = new DirectoryCatalog("bin"); 
var container = new CompositionContainer(catalog); 
container.ComposeParts(); 

var plugins = container.GetExportedValues<IPlugin>(); 
foreach (IPlugin plugin in plugins) 
{ 
    plugin.OnCreating(); 
} 

या घटनाओं के साथ एक इंटरफेस बनाने के रूप में ब्रायन मेन्स सुझाव:

public interface IPlugin 
{ 
    event OnCreatingEventHandler OnCreating; 
} 

तो उपर्युक्त कोड अधिक होगा:

var catalog = new DirectoryCatalog("bin"); 
var container = new CompositionContainer(catalog); 
container.ComposeParts(); 

var plugins = container.GetExportedValues<IPlugin>(); 
foreach (IPlugin plugin in plugins) 
{ 
    plugin.OnCreating += MyOnCreatingHandler; 
} 

मुझे लगता है कि मुझे वें पसंद है ई बाद में आपके द्वारा निर्दिष्ट विधि नामों के लिए। । मेरी प्लगइन काम के लिए, मैं एक अंतरफलक निम्न के समान बना लिया है:

public interface IPlugin 
{ 
    void Setup(); 
    void RegisterEntities(); 
    void SeedFactoryData(); 
} 

RegisterEntities() विधि कार्यावधि में डेटाबेस स्कीमा फैली हुई है, और SeedFactoryData() विधि किसी भी डिफ़ॉल्ट डेटा कहते हैं (उदाहरण के लिए डिफ़ॉल्ट उपयोगकर्ता जोड़ने, पूर्व शहरों की मेज, आदि की आबादी)।

14

आप partical कक्षाएं विधानसभाओं पर समन्वयित क्योंकि आंशिक वर्गों एक भाषा की सुविधा है, और एक CLR विशेषता है नहीं हो सकता। सी # कंपाइलर सभी आंशिक वर्गों को एक वास्तविक वर्ग में विलीन करता है, और वह एकल वर्ग संकलन के बाद ही एकमात्र चीज़ छोड़ दी जाती है। तरीकों आभासी और उन्हें

  • उपयोग एक अंतरफलक है जैसे कि यह घटनाओं सबसे अच्छा फिट बैठता है
  • आपकी समस्या लग रहा है ओवरराइड

    1. ऑफर घटनाओं
    2. :

      आप विकल्प की एक जोड़ी है। उपयोगकर्ता अन्य असेंबली में बस उन्हें सब्सक्राइब कर सकता है।

    1

    असेंबली में समर्थित आंशिक कक्षाएं समर्थित नहीं हैं।

    कारण यह है कि संकलन समय के दौरान सभी आंशिक वर्ग परिभाषाओं को एक वर्ग में जोड़ा जाता है। वह एकल वर्ग एक असेंबली में रहता है।

    0

    आंशिक तरीकों और कक्षाएं एक ही असेंबली में होनी चाहिए। यदि उपयोग नहीं किया जाता है तो आंशिक तरीकों को संकलित किया जाता है। यदि आपको कक्षाओं के लिए विस्तार बिंदु की आवश्यकता है तो आपको आभासी तरीकों या घटनाओं को देखना चाहिए।

    1

    ऐसे इंटरफेस का इस्तेमाल पर विचार करें:

    IUpdatableObject<X> 
        Creating(X obj); 
        Created(X obj); 
        Updating(X obj); 
        Updated(X obj); 
    

    और फिर कस्टम कोड में जोड़ने के लिए इस इंटरफेस का उपयोग; प्रत्येक तीसरी पार्टी इस इंटरफ़ेस को लागू कर सकती है (अच्छी तरह से वे या आप एक रैपर के माध्यम से कर सकते हैं) और यह कस्टम व्यापार तर्क जोड़ने में एक टाई हो सकती है।

    एचटीएच।

    +0

    इसके बारे में पूर्ण स्रोत कोड के साथ कोई पूर्ण नमूना? – Kiquenet

    1

    आप (या उपयोगकर्ता) विस्तार तरीकों का उपयोग कर सकते हैं: http://msdn.microsoft.com/en-us/library/bb383977.aspx

    विधानसभाओं भर
    +0

    क्या आप विस्तृत विस्तार विधियों के बारे में विस्तृत जानकारी दे सकते हैं? मुझे नहीं लगता कि वे ओपी की जरूरतों के विस्तार बिंदुओं के साथ मदद करते हैं। – CodesInChaos

    +1

    आप सही हैं। यह उत्तर विधानसभाओं में आंशिक रूप से केवल एक विकल्प है। घटना मूल समस्या के लिए सबसे अच्छा तरीका है। – r03

    0

    आंशिक वर्गों समर्थित नहीं हैं क्योंकि आंशिक वर्ग के पीछे की अवधारणा कई डेवलपर्स उसी के लिए विभिन्न तरीकों और सदस्यों योगदान करने के लिए अनुमति देने के लिए है एक विशेष नामस्थान के तहत कक्षा।
    यह डेवलपर्स को एक ही कक्षा में कोड को सिंक करने में मदद करने के लिए किया गया था, एक असेंबली के अंदर, संकलन के बाद निर्माण।

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