2
2

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.

Koinでインスタンス生成時にActivityをinjectする

Last updated at Posted at 2018-09-09

Koinを使ったをDI行った際にDagger AndroidのAndroidInjectorを使った場合のように、Activity/Fragment側でinjectしたクラス(Presenterなど)に対してActivity/Fragmentのインスタンスをコンストラクタインジェクションする方法が分からなかったので調べました。

対象となるクラスの定義

今回のサンプルとしてコンストラクタパラメータとしてActivityおよびUseCaseを必要とするPresenterを定義します。
(UseCaseクラスのインスタンス生成に関しては別途モジュール定義がされているものとします)

class LoginPresenter(private val activity: Activity, private val loginUseCase: LoginUseCase) {
}

##モジュールの定義

上記のLoginPresenterを生成するためのモジュール定義は以下のようになります。
通常のモジュール定義と異なり、LoginUseCaseに関してはget()を用いたKoinによるインスタンス生成を行いますが、Activityに関してはfactoryブロックのパラメータとして定義します。

val presenterModule = module {
    factory { (activity: Activity) -> LoginPresenter(activity, get()) }
}

##Activity側の実装

次のようにInjectする際にパラメータとしてfactoryブロックのパラメータとして定義したActivityのインスタンス(this)を指定する事が可能です。

class LoginActivity : AppCompatActivity() {
    private val loginPresenter: LoginPresenter by inject { parametersOf(this) }

    override fun onCreate(savedInstanceState: Bundle?) {
    }
}

##参考
https://beta.insert-koin.io/docs/1.0/documentation/koin-core/index.html#_defining_an_injection_parameter

2
2
0

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?