无法使用Dagger2注入livedata存储库类

时间:2019-11-08 12:52:20

标签: android mvvm dagger-2 android-livedata

我有一个Android项目,该项目使用Dagger 2,Livedata和viewmodel,rxjava和数据绑定。

到目前为止,我已经创建了一个AppComponent和两个SubComponent。 Appcomponent用于applicationscope,而一个子组件ControllerController用于Activity,片段和对话框。此ControllerComponent已注入基本活动中,并且工作正常。

另一个Sub组件是RetrofitComponent,用于视图模型存储库。现在,我似乎找不到在基础存储库中注入改造组件的方法,因为它是子组件,并且存储库类中没有applicationcontext。

AppComponent:

@ApplicationScope
@Component(modules = {
    ApplicationModule.class,
    PrefModule.class
})
public interface AppComponent {
  public void inject(AppInstance appInstance);

  public AppPreference getAppPref();

  public Application getApplication();

  public ControllerComponent newControllerComponent(ControllerModule controllerModule);

  public RetrofitComponent newRetrofitComponent(RetrofitModule retrofitModule);
}

RetrofitComponent:

@RepositoryScope
@Subcomponent(modules = {RetrofitModule.class})
public interface RetrofitComponent {
  public void inject(BaseRepo baseRepo);

  public APICall getApiCalls();
}

RetrofitModule:

@Module
public class RetrofitModule {
  @Provides
  @RepositoryScope
  public APICall providePostApi(Retrofit retrofit) {
    return retrofit.create(APICall.class);
  }

  @Provides
  @RepositoryScope
  public Retrofit provideRetrofitInterface() {
    return new RetrofitService().retrofit;
  }
}

BaseRepo;

@Inject
public APICall apiCall;

private Disposable subscription;
CompositeDisposable compositeDisposable = new CompositeDisposable();

private RetrofitComponent injector;

public BaseRepo() {
    //injector = DaggerRetrofitComponent.builder().retrofitModule(new RetrofitModule()).build();(I tried with dependent component had different problem)
    injector = ((AppInstance)getApplication()).getAppComponent().newRetrofitComponent(new RetrofitModule());(Not able to use getApplication())
    injector.inject(this);
}

我将使用子存储库从相应的视图模型扩展此基础存储库,因此我不打算通过活动或片段来传递应用程序。

我可能会缺少什么?还是做错了?还是我的方法不对?

再做一件事,我应该将存储库类注入Viewmodel类中还是应该创建一个工厂类并调用所需的任何存储库,这是更好的做法?

0 个答案:

没有答案