简体   繁体   English

如何使用Dagger 2.11注入ViewModel

[英]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.

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