मैं @ मॉड्यूल एनोटेशन के अंदर "इंजेक्शन" निर्देश के बिना डैगर काम करने की कोशिश कर रहा हूं।"इंजेक्शन" निर्देश के बिना डैगर मॉड्यूल का उपयोग करें
@Module(
injects = HomeActivity.class,
complete = false
)
public class DemoModule {
// TODO put your application-specific providers here!
}
(संपादित):: जो मेरी कोड में CTXModules.java
बात यह है कि मैं होता है मैं Android Simple Dagger example
इस पर अपने परीक्षण परियोजना आधारित हूँ हिस्सा है कि मुझे समस्याओं दे रही है निकालने की तरह "इंजेक्शन = होमएक्टिविटी.क्लास" है। मुझे पता है कि मैं उस भाग को हटाने के लिए कन्स्ट्रक्टर में @ इंजेक्शन एनोटेशन के साथ अपने मॉड्यूल को चिह्नित कर सकता हूं, लेकिन किसी भी तरह से यह ग्राफ में जोड़े गए मॉड्यूल के साथ काम नहीं करता है। उस रेखा के साथ, सब कुछ ठीक काम करता है।
कारण मुझे इसकी आवश्यकता है क्योंकि डैगर को बेस-लाइब्रेरी प्रोजेक्ट में लागू किया जाएगा जो कुछ परियोजनाओं के लिए आधार होगा जो एक सामान्य कोड बेस साझा करते हैं और इसलिए इस समय कोड के इस हिस्से को लिखते हैं या लिखते हैं यह नहीं पता कि कक्षाएं मॉड्यूल को इंजेक्ट करेगी।
क्या मैं भी ऐसा करने की कोशिश कर रहा हूं?
मुझे लगता है कि यह संभव है क्योंकि Android Module class उस निर्देश का उपयोग नहीं करता है।
आशा है कि यह पर्याप्त स्पष्ट है। अग्रिम में धन्यवाद!
(EDIT)
मुझे इसका उल्लेख करना चाहिए था। मेरे मॉड्यूल में मैं "इंजेक्शन = होमएक्टिविटी.क्लास" को हटाता हूं और Android Module class में "लाइब्रेरी = सत्य" जोड़ता हूं।
12-10 09:21:16.807: E/AndroidRuntime(21783): FATAL EXCEPTION: main
12-10 09:21:16.807: E/AndroidRuntime(21783): Process: com.ef.daggertestproject, PID: 21783
12-10 09:21:16.807: E/AndroidRuntime(21783): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ef.daggertestproject/com.ef.daggertestproject.MainActivity}: java.lang.IllegalArgumentException: No inject registered for members/com.ef.daggertestproject.MainActivity. You must explicitly add it to the 'injects' option in one of your modules.
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.access$700(ActivityThread.java:135)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.os.Handler.dispatchMessage(Handler.java:102)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.os.Looper.loop(Looper.java:137)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.main(ActivityThread.java:4998)
12-10 09:21:16.807: E/AndroidRuntime(21783): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 09:21:16.807: E/AndroidRuntime(21783): at java.lang.reflect.Method.invoke(Method.java:515)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-10 09:21:16.807: E/AndroidRuntime(21783): at dalvik.system.NativeStart.main(Native Method)
12-10 09:21:16.807: E/AndroidRuntime(21783): Caused by: java.lang.IllegalArgumentException: No inject registered for members/com.ef.daggertestproject.MainActivity. You must explicitly add it to the 'injects' option in one of your modules.
12-10 09:21:16.807: E/AndroidRuntime(21783): at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:281)
12-10 09:21:16.807: E/AndroidRuntime(21783): at dagger.ObjectGraph$DaggerObjectGraph.inject(ObjectGraph.java:258)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.MyApplication.inject(MyApplication.java:47)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.BaseActivity.onCreate(BaseActivity.java:27)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.MainActivity.onCreate(MainActivity.java:16)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.Activity.performCreate(Activity.java:5243)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
12-10 09:21:16.807: E/AndroidRuntime(21783): ... 11 more
इसके अलावा, मैं my test project to github
(अंतिम संपादित करें) अपलोड कर दिया जेक के जवाब के अनुसार: "एक मॉड्यूल की घोषणा क्या तब होता है कि मैं इस त्रुटि मिलती है (मेरा बुरा मैंने पहले नहीं जोड़ा यह) है क्योंकि लाइब्रेरी इंजेक्शन पॉइंट्स के बारे में जानने के लिए डैगर की ज़रूरतों को कम नहीं करती है। " और इसलिए मेरे मूल प्रश्न का उत्तर यह है कि यह संभव नहीं है।
धन्यवाद जेक, मैंने पहले ही कोशिश की है और अभी भी काम नहीं कर रहा है। मेरा बुरा मैंने इसे निर्दिष्ट नहीं किया। मैंने अपने प्रश्न को और अधिक प्रासंगिक जानकारी के साथ संपादित किया है और मैंने अपनी टेस्ट प्रोजेक्ट जिथब और मेरे द्वारा उल्लिखित कक्षाओं के कुछ लिंक जोड़े हैं। – spCoder
मैंने लाइब्रेरी मॉड्यूल की डाउनस्ट्रीम खपत दिखाने के लिए अपना जवाब अपडेट कर दिया है। इंजेक्ट करने में सक्षम होने के लिए आपको अभी भी 'इंजेक्ट्स' के बारे में डैगर को बताना होगा। –
इसलिए जैसा कि आपने अपने संपादन की शुरुआत में निर्दिष्ट किया है: "पुस्तकालय के रूप में एक मॉड्यूल घोषित करना इंजेक्शन बिंदुओं के बारे में जानने के लिए डैगर की आवश्यकताओं को कम नहीं करता है।" और इसलिए मेरे मूल प्रश्न का उत्तर यह है कि यह संभव नहीं है। धन्यवाद जेक! – spCoder