簡體   English   中英

如何使用Dagger 2.11注入ViewModel

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM