HasActivityInjector 无法在 android dagger 2 中解决
Posted
技术标签:
【中文标题】HasActivityInjector 无法在 android dagger 2 中解决【英文标题】:HasActivityInjector can not be resolved in android dagger 2 【发布时间】:2019-03-27 16:25:05 【问题描述】:我试图在我的 android 应用程序中实现 HasActivityInjector,但它显示 HasActivityInjector 无法解决。下面是我在项目中使用的依赖项和插件 -
apply plugin: 'kotlin-kapt'
和
implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
这是我正在尝试的代码 -
class RanoBoilerplateApplication : Application(), HasActivityInjector
@Inject
lateinit var activityDispatchingAndroidInjector:
DispatchingAndroidInjector<Activity>
override fun onCreate()
super.onCreate()
DaggerAppComponent.builder()
.application(this)
.build()
.inject(this)
override fun activityInjector(): AndroidInjector<Activity> =
activityDispatchingAndroidInjector
我不知道我必须包含哪些其他依赖项才能工作,如果有人以前这样做过,请帮助我。
找到最新的 Dagger 2 版本here。
编码愉快 :-)
【问题讨论】:
将您的版本更新到 2.17 并重建项目。 @UmangBurman,我已经在使用最新的一个依赖了。 @rekire,当然我正在导入提到的类,顺便说一下,我使用的是 Android stdio,它很酷,可以自行导入,也可以通过 Alt+Enter 轻松导入 【参考方案1】:如果有人在更新到 2.24
后来到这里,则会删除:https://github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c10。
您可以改用HasAndroidInjector
。
【讨论】:
谢谢老板。你拯救了我的一天 因为它是任何类型的。因此,我们也可以使用它来注入 Worker。是吗? 大声笑,或者当您尝试在2.24
下方使用HasAndroidInjector
时... D:【参考方案2】:
现在回答已经很晚了,但它可能对匕首世界的新手有用!
它已被 HasAndroidInjector 取代,以避免在您的应用程序类中实现多个 Dagger 接口,如 HasActivityInjector、HasServiceInjector 等。现在你只需要像下面这样实现 HasAndroidInjector:
class DaggerExampleApplication : Application(), HasAndroidInjector
@Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
override fun onCreate()
super.onCreate()
//Your code
【讨论】:
很高兴,您发现它很有用。 :)【参考方案3】:除了@mbonnin 和@Subhan 的回答,从2.24 版开始,HasActivity,Fragment,Service,ContentProvider,BroadcastReceiver
被删除。
如果您仍想支持这个旧实现,请使用同时支持HasAndroidInjector
和HasActivity,Fragment,Service,ContentProvider,BroadcastReceiver
的版本2.23。
这是 2.24 版的样子
应用
class ExampleApp: Application(), HasAndroidInjector
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
活动
class ExampleActivity: AppCompatActivity(), HasAndroidInjector
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
片段
class MoreFragment: Fragment(), HasAndroidInjector
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
/..../
【讨论】:
【参考方案4】:我的依赖项如下所示:
//Dagger
implementation "com.google.dagger:dagger:$libs.dagger"
implementation "com.google.dagger:dagger-android:$libs.dagger"
implementation "com.google.dagger:dagger-android-support:$libs.dagger"
kapt "com.google.dagger:dagger-compiler:$libs.dagger"
kapt "com.google.dagger:dagger-android-processor:$libs.dagger"
如果您使用的是 appcompat,则需要 support
。
$libs.dagger
指的是所需的匕首版本(例如 2.16)。
阅读有关依赖项的更多信息here。
【讨论】:
你能简单解释一下哪个依赖是什么? @BajrangHudda,简而言之 - 第一个和第四个是匕首工作所需的最小值(匕首类 + 注释处理器),第二个和第五个是使用Android
所需的(以及第三个)一个,如果你有 appcompat)。【参考方案5】:
可能是迟到的答案,但新的 Dagger2 依赖项带有 DaggerAppCompatActivity
和 DaggerFragment
类,它们对于自己注入活动和片段很有用。所以,我们不再需要HasActivityInjector
、自动注入方法或类似的东西。
【讨论】:
【参考方案6】:HasActivityInjector
是在新的 dagger android 支持模块中引入的。在您的 build.gradle 文件中包含以下依赖项。
kapt "com.google.dagger:dagger-android-processor:2.18"
implementation "com.google.dagger:dagger-android-support:2.18"
【讨论】:
以上是关于HasActivityInjector 无法在 android dagger 2 中解决的主要内容,如果未能解决你的问题,请参考以下文章