Comment puis-je fournir un contexte d'activité dans la classe mainModule? Merci! Le code ressemble à ceci:
@Singleton
@Component(modules = {AndroidInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(MvmApp app);
}
Constructeur d'activité:
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = {MainModule.class})
abstract MainActivity bindMainActivity();
}
Et j'ai un appModule et un module pour chaque activité:
@Module
public class AppModule {
@Provides
@Singleton
@ApplicationContext
Context provideContext(Application application) {
return application;
}
@Provides
@Singleton
DataManager provideDataManager(AppDataManager appDataManager) {
return appDataManager;
}
@Provides
@DatabaseInfo
String provideDatabaseName() {
return "carDatabase";
}
@Provides
@Singleton
AppDataBase provideAppDatabase(@DatabaseInfo String dbName, @ApplicationContext Context context) {
return Room.databaseBuilder(context, AppDataBase.class, dbName)
.build();
}
@Provides
@Singleton
DbHelper provideDbHelper(AppDbHelper appDbHelper) {
return appDbHelper;
}
}
AppClass:
public class MvmApp extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerAppComponent.builder()
.application(this)
.build()
.inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityDispatchingAndroidInjector;
}
}
Toutes mes activités étend une activité de base qui injecte les dépendances Dague.
public abstract class BaseActivity extends AppCompatActivity implements MvpView {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidInjection.inject(this);
}
}
Dans mainModule, je dois fournir le contexte de l'activité.
@Module
public class MainModule {
@Provides
MainMvpPresenter<MainMvpView> provideMainPresenter(
MainPresenter<MainMvpView> presenter) {
return presenter;
}
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
CarAdapter provideCarAdapter( @ActivityContext Context context) {
return new CarAdapter(context);
}
}
La solution était:
@Module
public class MainModule {
@Provides
MainMvpPresenter<MainMvpView> provideMainPresenter(
MainPresenter<MainMvpView> presenter) {
return presenter;
}
@Provides
CompositeDisposable provideCompositeDisposable() {
return new CompositeDisposable();
}
@Provides
CarAdapter provideCarAdapter(MainActivity activity) {
return new CarAdapter(activity);
}
}
Pour les personnes confrontées à un problème similaire, j'ai créé un projet avec Kotlin et la nouvelle extension Android-dagger
avec une longue explication sur la façon dont les choses fonctionnent ici: https://github.com/Obaied/BareBonesAndroidDagger