Kotlinを利用したプロジェクトで利用できるDIライブラリであるKoin(https://github.com/InsertKoinIO/koin)
ですが、Android開発用の拡張ライブラリであるkoin-androidを使ってAndroid Architecture ComponentsのViewModelを生成する方法についてまとめます。
基本的には下記のサイトに記載されている内容です。
https://beta.insert-koin.io/docs/1.0/quick-references/koin-android/#android-architecture-viewmodel
Koinの基本的な使い方については上記githubのREADME等をご参照ください。
Koinを用いない場合のViewModelの生成
Koinを用いない場合のAndroid Architecture ComponentsのViewModelクラスの生成方法は次のようにViewModelProviders
を使用します。
public class MyActivity extends AppCompatActivity {
public fun onCreate(savedInstanceState: Bundle) {
val model = ViewModelProviders.of(this).get(MyViewModel::class.java);
}
}
参考:https://developer.android.com/topic/libraries/architecture/viewmodel
Koinを用いる場合のViewModelの生成
Koinを用いる場合は以下のようにby viewModel()
によりインスタンス生成を行います。
通常のクラスの場合はby inject()
としますが、ViewModel
の場合はby viewModel()
を指定してください。
class LoginActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
また、プロパティなどにインジェクションしない場合はgetViewModel()
関数を使用することも可能です。
override fun onCreate() {
super.onCreate()
val model : MyViewModel = getViewModel()
}
ViewModelの為のモジュール定義
この場合のViewModel生成の為のモジュール定義は通常の場合のsingle
やfactory
ではなく次のようにviewModel
を指定します。
val viewModelModule = module {
viewModel<MyViewModel>()
viewModel { ParameterNeedViewModel(get()) } // パラメータが必要な場合
}