[英]How to inject current activity in a collaborator using Dagger 2.11 Android injector
[英]How to inject ViewModel using dagger 2.11
我在活動中創建了ViewModel :
mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory).get(OrdersViewModel.class);
我想按如下方式注入它:
@Inject OrdersViewModel mOrdersViewModel
這是我的ViewModel:
public class OrdersViewModel extends ViewModel {
private OrdersRepository trelloRepository; ();
@Inject
OrdersViewModel(@NonNull OrdersRepository repository) {
this.repository = repository;
}
ViewModelFactory模塊:
@Module
public abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(OrdersViewModel.class)
abstract ViewModel bindMovieListViewModel(OrdersViewModel ordersViewModel);
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ProjectViewModelFactory projectViewModelFactory);
最后,我在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);
您是否不需要將視圖模型模塊作為Component類作為應用程序組件? 我不是匕首大師,所以對此我不確定。
@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.