我有一个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类中还是应该创建一个工厂类并调用所需的任何存储库,这是更好的做法?