如何将 Repository 注入 ViewModel?
How to inject Repository into ViewModel?
我正在使用 Dagger 2,我有一个 DiComponent
定义如下:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
ApplicationModule.class,
PreferenceModule.class,
RetrofitModule.class,
RoomModule.class,
})
public interface DiComponent {
void inject(SplashScreen activity);
void inject(Home activity);
void inject(FYViewModel viewModel);
void inject(CFViewModel viewModel);
}
这是FYViewModel.class
:
public class FYViewModel extends AndroidViewModel {
private static final String TAG = FYViewModel.class.getSimpleName();
@Inject
public FYRepository mRepository;
private LiveData<List<Post>> mPostList;
public FYViewModel(Application application) {
super(application);
Log.d(TAG, "FYViewModel: " + mRepository);
// mPostList = mRepository.getAllPosts();
}
public LiveData<List<Post>> getAllPosts() {
return mPostList;
}
public void fetchNextData(int page) {
mRepository.fetchNextPosts(page);
}
}
但是,mRepository
变量始终为空。
如何使用 Dagger 2 将 Repositroy 注入我的 ViewModels?
我建议为此设置一个 ViewModel 工厂。
这是一本好书:
https://proandroiddev.com/viewmodel-with-dagger2-architecture-components-2e06f06c9455
设置它,为存储库添加一个@Provides class,然后您可以注入您的存储库。
我正在使用 Dagger 2,我有一个 DiComponent
定义如下:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
ApplicationModule.class,
PreferenceModule.class,
RetrofitModule.class,
RoomModule.class,
})
public interface DiComponent {
void inject(SplashScreen activity);
void inject(Home activity);
void inject(FYViewModel viewModel);
void inject(CFViewModel viewModel);
}
这是FYViewModel.class
:
public class FYViewModel extends AndroidViewModel {
private static final String TAG = FYViewModel.class.getSimpleName();
@Inject
public FYRepository mRepository;
private LiveData<List<Post>> mPostList;
public FYViewModel(Application application) {
super(application);
Log.d(TAG, "FYViewModel: " + mRepository);
// mPostList = mRepository.getAllPosts();
}
public LiveData<List<Post>> getAllPosts() {
return mPostList;
}
public void fetchNextData(int page) {
mRepository.fetchNextPosts(page);
}
}
但是,mRepository
变量始终为空。
如何使用 Dagger 2 将 Repositroy 注入我的 ViewModels?
我建议为此设置一个 ViewModel 工厂。
这是一本好书:
https://proandroiddev.com/viewmodel-with-dagger2-architecture-components-2e06f06c9455
设置它,为存储库添加一个@Provides class,然后您可以注入您的存储库。