На Android, при использовании Dagger2, я должен вызывать следующую строку для каждого вида деятельности, который использует apiService
:
@Inject
public ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerApiComponent.builder()
.activityModule(new ActivityModule(this))
.build()
.inject(this);
//...
}
Как я могу обобщить его примерно так:
DaggerApiComponent.builder()
.activity(this)
.build()
.inject(this);
или даже проще, например:
MyApplication.injectApiService(this);
Как мне поменять компоненты и модули, чтобы использовать Dagger2 с меньшим количеством кода для вставки копий в моих действиях?
Вот мой ApiComponent
:
@Singleton
@Component(modules = ApiModule.class)
public interface ApiComponent {
void inject(MainActivity activity);
void inject(...
}
Вот ApiModule
:
@Module(includes = {RetrofitModule.class, ActivityModule.class})
public class ApiModule {
@Singleton
@Provides
public static ApiService provideApiService(Activity activity) {
//...
}
}
и ActivityModule
:
@Module
public class ActivityModule {
private final Activity context;
public ActivityModule(Activity context) {
this.context = context;
}
@Singleton
@Provides
public Activity provideActivityContext() {
return context;
}
}