मेरा प्रश्न this जैसा है।डैगर 2 (गतिविधि स्कोप के भीतर) के साथ कस्टम व्यू निर्भरता इंजेक्शन
public class CustomLiveData extends LiveData<SomeEvent> {
@Inject
public CustomLiveData(@ActivityContext Context context) {
//....
}
}
है कि मैं एक कस्टम दृश्य में इंजेक्षन करना चाहते हैं:
:public class CustomView extends View {
@Inject
SomeApplicationProvider anyProvider;
@Inject
CustomLiveData dataProvider;
// Getting @com.di.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method.
// @com.di.qualifiers.ActivityContext android.content.Context is injected at com.repositories.CustomLiveData.<init>(context)
// com.repositories.CustomLiveData is injected at com.ui.CustomView.dataProvider com.ui.CustomView is injected at
// com.di.ApplicationComponent.inject(view)
public CustomView(Context context) { this(context, null); }
public CustomView(Context AttributeSet attrs) {
super(context, attrs);
// Works ok for application provider
Application.getComponent(context).inject(this);
}
}
और यहाँ डि वर्गों के बाकी है
तो उदाहरण के लिए, मैं एक LiveData
कार्यान्वयन है
@ApplicationScope
@Component(
modules = {AndroidInjectionModule.class,
ActivityBuilder.class
})
public interface ApplicationComponent extends AndroidInjector<MyApp> {
void inject(MyApp application);
void inject(CustomView view);
@Component.Builder
abstract class Builder extends AndroidInjector.Builder<MyApp> {
public abstract ApplicationComponent build();
}
}
@ActivityScope
@Module (subcomponents = MainActivitySubcomponent.class)
public abstract class ActivityBuilder {
@Binds
@IntoMap
@ActivityKey(MainActivity.class)
abstract AndroidInjector.Factory<? extends Activity>
bindActivityInjectorFactory(MainActivitySubcomponent.Builder builder);
//...
}
@Subcomponent(modules = {MainActivityModule.class})
public interface MainActivitySubcomponent extends AndroidInjector<MainActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<MainActivity> {
}
}
@ActivityScope
@Module
public class MainActivityModule {
@Provides
@ActivityContext
public Context provideActivityContext(MainActivity activity) {
return activity;
}
// Seems to be wrong or not enough!?
@Provides
public CustomLiveData provideCustomLiveData(@ActivityContext Context context) {
return new CustomLiveData(context);
}
}
@Qualifier
public @interface ActivityContext{
}
नोट, मुझेपर कोई कंपाइलर शिकायत नहीं मिलती हैको देखने के बजाय MainActivity
में इंजेक्शन दिया गया है। धन्यवाद!
क्या आपको 'कस्टम लाइवडाइट' को 'कस्टम' व्यू में इंजेक्शन देने पर कोई संकलन त्रुटि मिली? कृपया इसे अपने प्रश्न के साथ पोस्ट करें। –
संदेश को कस्टम व्यू भाग में शामिल किया गया था। "// getting @ com.di.qualifiers.ActivityContext android.content.Context नहीं देख सकता ....." – sinek
क्या आप '@ ActivityContext' पोस्ट कर सकते हैं? –