I have ViewModel created in activity:
mOrdersViewModel = ViewModelProviders.of(this, viewModelFactory).get(OrdersViewModel.class);
I'd like to inject it as below :
@Inject OrdersViewModel mOrdersViewModel
This is my ViewModel:
public class OrdersViewModel extends ViewModel {
private OrdersRepository trelloRepository; ();
@Inject
OrdersViewModel(@NonNull OrdersRepository repository) {
this.repository = repository;
}
ViewModelFactory module:
@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:
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? 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)
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.