【问题标题】:HasActivityInjector can not be resolved in android dagger 2HasActivityInjector 无法在 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 轻松导入

标签: android dependency-injection kotlin dagger-2


【解决方案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 版开始,Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver} 被删除。 如果您仍想支持这个旧实现,请使用同时支持HasAndroidInjectorHas{Activity,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 依赖项带有 DaggerAppCompatActivityDaggerFragment 类,它们对于自己注入活动和片段很有用。所以,我们不再需要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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-10
        • 2015-11-17
        相关资源
        最近更新 更多