phicdy devlog

Androidアプリ開発やその他技術系の記事をたまに書きます

AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

Koin 2.0へのマイグレーション

先日Koin 2.0が出たのでアップデートしてみました。

medium.com

APIが変わっているのでマイグレーションが必要です。

エントリポイントの変更

1.0まではApplicationクラスでstartKoin()に自身とモジュールのリストを渡していましたが、DSLになり、個別に指定するようになりました。

-        startKoin(this, listOf(appModule))
+        startKoin {
+            androidLogger()
+            androidContext(this@MyApplication)
+            modules(listOf(appModule))
+        }

スコープの変更

1.0までは自分で名前をつけており、非常に不便でした。2.0からはActivity/Fragmentを型として指定できるので便利です。

-    scope("main") { (view: MainActivityView) ->
-        MainActivityPresenter(
-                view = view,
-                hogeRepository = get(),
-                fugaUseCase = get()
-        )
+    scope(named<MainActivity>()) {
+        scoped { (view: MainActivityView) ->
+            MainActivityPresenter(
+                    view = view,
+                    hogeRepository = get(),
+                    fugaUseCase = get()
+            )
+        }
     }

Activity/Fragment側では1.0までは bindScope(getOrCreateScope("main")) と書いていましたが不要になりました。そしてinject()の代わりにcurrentScope.inject()を使います。これで自動的にスコープが紐づくようです。

-    private val presenter: MainActivityPresenter by inject { parametersOf(this) }
+    private val presenter: MainActivityPresenter by currentScope.inject { parametersOf(this) }

私の環境ではこれだけでマイグレーションできました。もっといろんな機能を使っている方は公式サイトも2.0のドキュメントになっているのでそちらを参照すれば対応可能かと思います。

おわりに

Annotation Processorを使っているDaggerほどではないもののKoin 2.0ではかなり起動時のパフォーマンスが改善されました。今後にも期待です。

参考

insert-koin.io