Ich versuche, das folgende Verhalten zu erreichen:Module mit gemischten Bereichen
- ein Objekt von einem Modul unter einem Singleton Umfang in einem anderen Modul mit einem anderen Bereich vorgesehen verwenden.
Hier ist was ich habe. Ich habe viele Änderungen auf der Grundlage mehrerer Antworten versucht, aber ich kann dieses Problem immer noch nicht lösen.
Das erste Modul (sollte der Lebenszyklus der Anwendung gebunden werden)
@Module
public class AModule {
private Context context;
public AModule(Context context) {
this.context = context;
}
@Provides
@Singleton
MySharedPreference provideMySharedPreference(SharedPreferences prefs) {
return new MySharedPreferences(prefs);
}
@Provides
@Singleton
SharedPreference provideSharedPreference() {
return context.getSharedPreferences("prefs", 0);
}
Es ist Bestandteil
@Component(modules = AModule.class)
@Singleton
public interface AComponent {
void inject(...);
}
Das zweite Modul (begrenzt auf Activity Lifecycle)
@Module
public class BModule {
@Provides
@ActivityScope
X provideX(MySharedPreferences prefs) {
return new Y(prefs);
}
}
Es ist Komponente
@Component(modules = BModule.class)
@ActivityScope
public interface BComponent {
Y Y();
}
ich die Aktivität Scope erklärt
@Scope
@Retenion(RetentionPolicy.RUNTIME)
public @interface ActivityScope{}
Und MySharedPreferences als
public class MySharedPreferences {
private SharedPreferences mSharedPrefs;
@Inject
public MySharedPreferences(SharedPreferences prefs) {
mSharedPrefs = prefs;
}
// some methods
}
schließlich in meiner Anwendungsklasse folgt, ist, ich die A-Komponente
aComponent = DaggerAComponent.builder().aModule(new AModule(getApplicationContext())).build();
EDIT erstellen Einige der Dinge, die ich ausprobiert
Ich habe versucht, includes = AModule.class
zum BModule hinzuzufügen. Ich habe versucht, dependencies = AComponent.class
der BComponent hinzuzufügen. Ich habe versucht, eine neue Komponente mit der ActivityScope Annotation zu erstellen.
Danke für Ihre Antwort! Jetzt verstehe ich. Ich hatte tatsächlich etwas Ähnliches versucht, um das Problem zu lösen, aber jetzt ist es viel klarer. –