Как использовать AndroidInjection Dagger в библиотеке Android без доступа к классу Application
Во время разработки библиотеки или, скажем, плагина для проекта, я столкнулся с проблемой Dagger. В прошлом мы использовали старый Dagger API, который в основном осуществлялся путем доступа к компоненту через статическую ссылку и внедрения собственного или произвольного представления Activity.
Когда мы попытались перенести проект на новый Dagger API и поэтому использовали:
AndroidInjection.inject(this) // Just inject the Activity without knowledge of the dependency graph
мы столкнулись с некоторыми проблемами во время выполнения, когда пытались запустить Activity библиотеки.
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<eu.applabs.dagger2library.feature.FeatureActivity>
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:104)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at eu.applabs.dagger2library.feature.FeatureActivity.onCreate(FeatureActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7144)
at android.app.Activity.performCreate(Activity.java:7135)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Проблема может быть исправлена, когда каждый модуль библиотеки добавляется к компоненту приложения, но должен быть лучший способ с использованием обычного компонента или структуры подкомпонента.
Поэтому я решил создать пример проекта на GitHub
Я был бы очень признателен, если бы смог получить некоторую поддержку, потому что все предоставленные примеры не охватывают сценарий использования библиотеки...
0 ответов
Вы можете использовать классы поддержки кинжала. Взгляните на этот https://medium.com/@ibrahimsn98/android-mvvm-with-dagger-2-retrofit-rxjava-architecture-components-6f5da1a75135