8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AACのViewModelをKoinでInjectする

Posted at

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生成の為のモジュール定義は通常の場合のsinglefactoryではなく次のようにviewModelを指定します。

val viewModelModule = module {
    viewModel<MyViewModel>()
    viewModel { ParameterNeedViewModel(get()) } // パラメータが必要な場合
}
8
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?