Как использовать 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

Другие вопросы по тегам