私は、DaggerシングルトンをAndroidコンポーネント(サービス)とViewModelに注入することに苦労しています。Android ViewModelにsetter注入を使用すると何が問題になりますかViewModel.Factoryを実装し注入するのですか?
参考として、questionを参照してください。 と同じオブジェクトを持つViewModelのフィールドとフィールドに単純にフィールドを挿入する方法の良い例は見つかりませんでした。それに対する単純な解決策があるなら、私はそれを見るのが大好きです。
私はViewModel.Factoryを実装してから作成する方法を経由して依存関係を持っているのViewModelサブクラスのコンストラクタに依存性の注入の道を行く答えを持っているいくつかの質問、hereとhereを見つけました。
私の質問です。アクティビティ(とサービス)にオブジェクトを注入してから、Setterを使用してオブジェクトを取得した後にオブジェクトをViewModelに注入するだけで重大な問題はありますか?例えば。私は値が既に設定されているかどうかをチェックし、それがnullだ場合にのみ、それを設定することができ観点MainViewModel
クラスで
class MainActivity : AppCompatActivity() {
@Inject lateinit var messageBus: MessageBus // "thing" I want in the ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
// get the ViewModel
val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
// inject the "thing" via a setter
viewModel.messageBus = messageBus
}
}
。
class MainViewModel: ViewModel() {
var messageBus: MessageBus? = null
set(value) {
if (field == null) {
field = value
// do initialization stuff
}
}
}