binding - How to bind Assisted Injected class to interface? -
यहाँ मुझे जो समस्या मिली है:
क्लास सरल कॉमांड कार्यान्वयन निष्पादनीय {निजी फाइनल कॉन्फ़िगरेशन कॉन्फ़िगरेशन ; निजी स्ट्रिंग का नाम; @ सार्वजनिक सिंपल कॉमांड (ConfigManager config, @assisted string name) इंजेक्ट करें {this.config = config; This.name = name; }} क्लास MyModule एब्स्ट्रैक्ट मॉड्यूल का विस्तार करता है {@Override सुरक्षित शून्य विन्यास () {बाँध (CommandFactory.class) .toProvider (FactoryProvider.newfactory (CommandFactory.class, SimpleCommand.class)); बाँध (Executable.class) करें.अभियान (SimpleCommand.class); }}
जब मैं SimpleCommand का प्रयोग करने का प्रयास करता हूं:
Guice.createInjector (नया MyModule ())। GetInstance (CommandFactory.class)। बनाएँ ("नमूना कमांड");
मुझे यह त्रुटि मिली:
1) java.lang.String के लिए कोई कार्यान्वयन @ com.google.inject.assistedinject.Assisted के साथ एनोटेट किया गया (मान =) बाध्य था। मॉड्यूल पर पैरामीटर 2 के लिए @ com.google.inject.assistedinject.Assisted (value =) के साथ java.lang.String एनोटेट करते समय। कॉमांड। & Lt; init & gt; (SimpleCommand.java:58) मॉड्यूल पर। MyModule.configure (MyModule .java: 34)
तो मेरी समस्या है कि मैं SimpleCommand को निष्पादन योग्य करने के लिए बाध्य कैसे कर सकता हूँ जब SimpleCommand ने इंजेक्शन पैरामीटर को सहायता प्रदान की है?
यहां CommandFactory और इसके कार्यान्वयन है: / P>
सार्वजनिक इंटरफेस कमांडएफ़ैक्टर {सार्वजनिक कमांड बनाने (स्ट्रिंग का नाम); } सार्वजनिक वर्ग GuiceCommandFactory CommandFactory {निजी प्रदाता & lt; ConfigManager & gt; ConfigManager; @ सार्वजनिक GuiceCommandFactory (प्रदाता & lt; ConfigManager & gt; configManager) {this.configManager = configManager; } सार्वजनिक कमांड बनाने (स्ट्रिंग सीएमडी) {नया कमांड (configManager.get (), सीएमडी); }}
दो समस्याएं हैं।
एक बाइंड (एक्जीक्यूटेबल। क्लास) के साथ है। टू (सरल कॉमांड। क्लास)
। बाध्यकारी निष्पादनीय
से SimpleCommand
का अर्थ है कि SimpleCommand
को निष्पादन योग्य
पर निर्भरता के साथ कक्षाओं में सीधे इंजेक्ट किया जा सकता है। लेकिन चूंकि Guice खुद को SimpleCommand
का एक उदाहरण नहीं बना सकता (इसके लिए फैक्ट्री को प्रदान किए गए सहायता प्रदान किए गए पैरामीटर की आवश्यकता होती है), बाइंड अमान्य है। त्रुटि संदेश एक सामान्य बाइंडिंग एनोटेशन के रूप में @Assisted
का इलाज कर रहा है, और एक स्ट्रिंग
को कन्स्ट्रक्टर में बाध्य करने की कोशिश कर रहा है, लेकिन कोई भी बाध्य नहीं है।
निष्पादन योग्य
s के लिए एक कारखाना बनाने में असिस्टेड इंजेक्शन का उपयोग कर रहे हैं, तो आप इसके लिए एक और बाध्यकारी नहीं बना सकते उस पर कुछ बाइंडिंग एनोटेशन का उपयोग किए बिना < / em>। चूंकि आप सहायक इंजेक्ट का उपयोग कर रहे हैं, संभवत: आप अपने कारखाने का उपयोग करके निष्पादन योग्य
के कई उदाहरण बनाना चाहते हैं, इसलिए आप सीधे बाइंड करना चाहते हैं, शायद कुछ विशिष्ट अर्थ होंगे ठीक है? उस स्थिति में, आपको बस कुछ बाइंडिंग एनोटेशन जैसे कि @Default
और एक प्रदाता विधि का उपयोग करना चाहिए जैसे:
@ डीफॉल्ट संरक्षित निष्पादन योग्य प्रदान करता है डीफॉल्ट एक्स्पोज्टेबल (कॉन्फ़िगर मैनेजर कॉन्फ़िग मैनेजर) प्रदान करता है {नया सरल कॉमांड (कॉन्फ़िग मैनेजर, "मेरा डिफ़ॉल्ट कमांड"); }
Comments
Post a Comment