मैं निम्नलिखित सरल मॉड्यूल है:संदर्भ @ प्रोविड-एनोटेटेड विधि के बिना प्रदान नहीं किया जा सकता है, लेकिन यह है?
@Module
public class ApplicationModule {
private CustomApplication customApplication;
public ApplicationModule(CustomApplication customApplication) {
this.customApplication = customApplication;
}
@Provides @Singleton CustomApplication provideCustomApplication() {
return this.customApplication;
}
@Provides @Singleton @ForApplication Context provideApplicationContext() {
return this.customApplication;
}
}
और संबंधित सरल घटक:
@Singleton
@Component(
modules = ApplicationModule.class
)
public interface ApplicationComponent {
CustomApplication getCustomApplication();
Context getApplicationContext();
}
और मैं घटक यहाँ बना रहा हूं:
public class CustomApplication extends Application {
...
private ApplicationComponent component;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
component = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
यह इस त्रुटि फेंकता संकलन समय: Error:(22, 13) error: android.content.Context cannot be provided without an @Provides-annotated method
, लेकिन जैसा कि आप देख सकते हैं कि यह @Provides
के साथ एनोटेट किया गया है।
यह वास्तव में अजीब बात है क्योंकि जब मैं क्वालीफायर एनोटेशन बंद करता हूं तो समस्या दूर हो जाती है।
@Qualifier @Retention(RUNTIME)
public @interface ForApplication {
}
यह व्यावहारिक रूप से एक पाठ्यपुस्तक Dagger2 उदाहरण है:
शायद ज़रुरत पड़े, यह मेरा @ForApplication
क्वालीफायर है। मैं क्या गलत कर रहा हूं?
एक ही मुद्दा। मुझे अपने कन्स्ट्रक्टर को '@ ForAplication' जोड़ना पड़ा: '@ MyThing इंजेक्ट करें (@ForAplication संदर्भ संदर्भ) {this.context = context; } ' – anon
यह समझ में नहीं आता है। आप वास्तव में कहां से 'getAplicationContext() 'कह रहे हैं ?? –
क्या आप विस्तार से बता सकते हैं कि वास्तव में क्या समझ में नहीं आता है? मैं उस विधि को नहीं बुला रहा हूं, यह केवल डैगर 2 घटक के लिए एक घोषणा है। मैं बस इतना कह रहा हूं कि उस दायरे में 'संदर्भ' की घोषणा में एनोटेशन गायब था। यही कारण है कि मुझे त्रुटि मिल रही थी, क्योंकि मेरे मॉड्यूल ने निर्दिष्ट किया था कि प्रदत्त संदर्भ '@ ForAplication 'था और मेरा घटक नहीं था। – Eddnav