AACのViewModelをKoinでInjectする
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()) } // パラメータが必要な場合 }