Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android ViewModel中注入依赖项?_Android_Dagger 2_Android Viewmodel - Fatal编程技术网

在Android ViewModel中注入依赖项?

在Android ViewModel中注入依赖项?,android,dagger-2,android-viewmodel,Android,Dagger 2,Android Viewmodel,嗨,我有一个ViewModel,它有两个var,使用Dagger 2.11注入 然而,它从未在我的viewModel中注入,而在我的应用程序的其他地方,这些依赖变量被初始化并完美注入 下面是我的viewModel class MyViewModel : AndroidViewModel, MyViewModelContract { private lateinit var pointsBalance: MutableLiveData<PointsBalance>

嗨,我有一个ViewModel,它有两个var,使用Dagger 2.11注入

然而,它从未在我的viewModel中注入,而在我的应用程序的其他地方,这些依赖变量被初始化并完美注入

下面是我的viewModel

class MyViewModel : AndroidViewModel, MyViewModelContract {


    private lateinit var pointsBalance: MutableLiveData<PointsBalance>


    @Inject
    lateinit var accountDelegator: AccountDelegatorContract



@Inject
constructor(application: Application) : super(application)

init {
    DaggerApplicationComponent.builder().application(getApplication() as MyApplication).build().inject(this)
}

    override fun getPointsBalance(): LiveData<PointsBalance> {
        if (!this::pointsBalance.isInitialized) {
           //get balance from network api etc
        }

        return pointsBalance
    }
我的自定义应用程序

class MyApplication : DaggerApplication() {
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        val applicationComponent = DaggerApplicationComponent.builder()
                .application(this)
                .build()
        applicationComponent.inject(this)
        return applicationComponent
    }

}

我认为问题在于您没有调用
inject
。您需要开始将以下内容添加到
ApplicationComponent

void inject(MyViewModel viewModel);
我在这里所做的是,fwiw继承了
AndroidViewModel
(它提供了对应用程序实例的访问),然后在ViewModel类中调用以下内容(您需要用在代码中访问组件的方式替换
DaggerProvider.getComponent


我现在遇到了这个错误:无法创建MyViewModelOk类的实例,尽管我已经修复了这个错误,但是我仍然遇到了依赖项变量不可用的问题injected@jonney您的
init
中有什么内容?我已经更新了我的答案,以描述我添加到构造函数和inithmm中的内容,在这种情况下,不确定问题是什么。fwiw在另一个项目中,我再次使用了一种可能有用的方法(使用注入到Activity/Fragment中的
ViewModelProvider.Factory
实例)-
@Singleton
@Component(modules = arrayOf(MyModule::class,
        ))
interface ApplicationComponent : AndroidInjector<DaggerApplication> {
    fun inject(mApplication: MyApplication)
    override fun inject(instance: DaggerApplication)

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(applicaton: MyApplication): Builder
        fun build(): ApplicationComponent
    }


}
viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
void inject(MyViewModel viewModel);
init {
    DaggerProvider.getComponent(application).inject(this)
}