我有一个简单的情况,我无法绕过(因为今天是我用匕首的第二天)。
我有一个RepositoryManager类,其目的是容纳所有存储库,如(StudentRepo,TeacherRepo等等)
这是我的RepositoryManager
public class RepositoryManager {
private static RepositoryManager INSTANCE = null;
@Inject
StudentRepo studentRepo;
@Inject
TeacherRepo teacherRepo;
private final List<Repository> repositories;
private Context context;
@Inject
public RepositoryManager(Context context) {
this.repositories = new ArrayList<>();
this.context = context;
addRepositories();
}
private void addRepositories() {
addRepository(studentRepo);
addRepository(teacherRepo);
}
我理解为什么我的studentRepo和teacherRepo在这里为空。因为我没有让Dagger为我取得它们。我相信我错过了Dagger的一些非常重要的方面,我们可以在其中显式获取所需对象的实例。
StudentRepo btw有自己的模块,我可以轻松地将其拉出来。
我的问题是如何在非活动类中获取实例。
我的AppComponent
@Singleton
@Component(modules =
{
AndroidInjectionModule.class,
ApplicationModule.class,
ActivityBindingModule.class,
RepositoryModule.class})
public interface AppComponent extends AndroidInjector<ChallengerHuntApplication> {
RepositoryManager exposeRepositoryManager();
@Component.Builder
interface Builder {
@BindsInstance
AppComponent.Builder application(Application application);
AppComponent build();
}
}
RepositoryModule
@Module(includes = SystemRepositoryModule.class)
public class RepositoryModule {
}
学生资源库模块
@Module
public class StudentRepositoryModule {
@Singleton
@Provides
@Local
public StudentDataSource provideStudentLocalDataSource(Context context) {
return new StudentLocalDataSource(context);
}
@Singleton
@Provides
@Remote
public StudentDataSource provideStudentRemoteDataSource(Context context) {
return new StudentRemoteDataSource();
}
}