[英]How to inject ViewModel using dagger 2.11
I have ViewModel created in activity: 我在活动中创建了ViewModel :
mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory).get(OrdersViewModel.class);
I'd like to inject it as below : 我想按如下方式注入它:
@Inject OrdersViewModel mOrdersViewModel
This is my ViewModel: 这是我的ViewModel:
public class OrdersViewModel extends ViewModel {
private OrdersRepository trelloRepository; ();
@Inject
OrdersViewModel(@NonNull OrdersRepository repository) {
this.repository = repository;
}
ViewModelFactory module: ViewModelFactory模块:
@Module
public abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(OrdersViewModel.class)
abstract ViewModel bindMovieListViewModel(OrdersViewModel ordersViewModel);
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ProjectViewModelFactory projectViewModelFactory);
Finally , I get Viewmodel in MainActivity, so: 最后,我在MainActivity中获得Viewmodel,因此:
public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector, OrderCallback {
@Inject
DispatchingAndroidInjector<Fragment> dispatchingAndroidInjector;
@Inject
public ViewModelProvider.Factory viewModelFactory;
private OrdersViewModel mOrdersViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AndroidInjection.inject(this);
ButterKnife.bind(this);
mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory)
.get(OrdersViewModel.class);
Don't you need your view-model Module to a Component class, as a application component? 您是否不需要将视图模型模块作为Component类作为应用程序组件? I am not a master dagger, so i am not sure about this.
我不是匕首大师,所以对此我不确定。
@Singleton
@Component(modules = [
ViewModelModule ::class]
)
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApplication): Builder
fun build(): AppComponent
}
fun inject(app: MyApplication)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.