简体   繁体   中英

How to inject ViewModel using dagger 2.11

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM