2010-01-20 12 views
14

मुझे एक पार्सर के अंदर एक कारखाना विधि मिल गई है। अनिवार्य रूप से जब मैं एक टोकन लोड करता हूं तो मैं उस टोकन के लिए हैंडलर देखता हूं, या डिफ़ॉल्ट हैंडलर से ड्रॉप करता हूं। मैंने इसे switch और Dictionary<string,Type> के रूप में कार्यान्वित किया है, लेकिन दोनों दृष्टिकोणों के लिए मुझे हैंडलर क्लास की तुलना में मैपिंग को कहीं और स्टोर करने की आवश्यकता है।एक कारखाने को बदलने के लिए निनजेक आईओसी का उपयोग

हम आईओसी के लिए Ninject का उपयोग कर रहे हैं और इसलिए मैं कर दिया है महसूस किया कि मैं भी यह

kernel.Get<ITokenHandler>(tokenName); 

का उपयोग करते हैं, लेकिन है कि मुझे क्या हैंडलर 2 स्थानों में से निपटने कर सकते हैं टोकन पर सूचना के संचय को बचाने नहीं करता है सकते हैं । क्या कोई तरीका है कि मैं हैंडलर को सजाने में सक्षम हूं ताकि यह स्वचालित रूप से मैप हो जाए?

उत्तर

11

यदि मैं आपके प्रश्न का सही पालन करता हूं, तो ऐसा लगता है कि आप एक नामित बाध्यकारी पुनर्प्राप्त करना चाहते हैं। आपने उल्लेख नहीं किया कि आप निनजेक्ट का किस संस्करण का उपयोग कर रहे हैं, लेकिन आपके कोड स्निपेट के आधार पर, मुझे लगता है कि आप निनजेक्ट 2.0 का उपयोग कर रहे हैं। अगर ऐसी बात है तो मैं इस अपने अपने मॉड्यूल में बांधने के लिए पर्याप्त होगा लगता होगा:

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName); 

आप एक ही इंटरफ़ेस के रूप में कई ठोस प्रकार बाँध और नाम से उन्हें अलग, और फिर सटीक वाक्य-विन्यास आप का उपयोग कर उन्हें पुनः प्राप्त आपके प्रश्न में निर्दिष्ट है।

यदि मुझे कुछ कुंजी याद आ रही है, तो मुझे बताएं।

+0

यहां वापस आने में थोड़ा देर हो चुकी है। मैं वास्तव में आईटोकन हैंडलर कंक्रीट कक्षाओं को चिह्नित करने का एक तरीका था, ताकि मैं बाइंडिंग को परिभाषित कर सकूं जहां हैंडलर घोषित किया गया था। अब मैं आपके उदाहरण के साथ गया हूं बाइंडिंग के सभी बार 1 पैटर्न के हैं: बाइंड ()। <जेनेरिक टोकन हैंडलर <टोकन टाइप टू कॉन्स्ट्रक्चर >>()। नामांकित (टोकननाम); – baralong

1

एक तकनीक जिसका मैंने उपयोग किया है Bind सामान इस तरह से है कि आपको उस बिंदु पर पैरामीटर (संदर्भ में) को सौंपने की आवश्यकता हो सकती है जहां आप किसी को कुछ चुनने के लिए चाहते हैं।

http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Context और http://ninject.codeplex.com/wikipage?title=Contextual%20Binding आप इस तरह से कि आप कह सकते हैं Only(When.Context...) चयन काम करने के लिए में चीजों को बाध्य करने के लिए सक्षम होना चाहिए के बीच

?

+0

केवल दूसरे जवाब को देखा (जैसा कि इस पर +1 किया गया था)। दूसरा उत्तर एक और अधिक स्पष्ट और स्पष्ट दृष्टिकोण की तरह दिखता है, इसलिए यदि संभव हो तो मैं इसे निश्चित रूप से पसंद करूंगा - मेरे दृष्टिकोण एक और सामान्य दृष्टिकोण है जब तरीकों से बनाया गया संभव नहीं है। –

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