用匕首注入POJO

时间:2017-11-08 16:35:47

标签: java android dagger-2

我有一个简单的情况,我无法绕过(因为今天是我用匕首的第二天)。

我有一个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();
    }

}

0 个答案:

没有答案