无法在android dagger 2中解析HasActivityInjector

无法在android dagger 2中解析HasActivityInjector,android,dependency-injection,kotlin,dagger-2,Android,Dependency Injection,Kotlin,Dagger 2,我试图在我的android应用程序中实现HasActivityInjector,但它表明HasActivityInjector无法解决。下面是我在项目中使用的依赖项和插件- apply plugin: 'kotlin-kapt' 及 这是我正在尝试的代码- class RanoBoilerplateApplication : Application(), HasActivityInjector{ @Inject lateinit var activityDispatchingA

我试图在我的android应用程序中实现HasActivityInjector,但它表明HasActivityInjector无法解决。下面是我在项目中使用的依赖项和插件-

apply plugin: 'kotlin-kapt'

这是我正在尝试的代码-

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
}
类RanoBoilerplateApplication:Application(),HasActivityInjector{ @注入 lateinit var Activity Dispatching Android Injector: 派遣一名飞行员


快乐编码:-)

我的依赖项如下所示:

//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,则需要
支持。
而
${libs.dagger}
引用了所需的dagger版本(例如2.16)。
阅读有关依赖项的更多信息。

HasActivityInjector
是在新的dagger android支持模块中引入的。请在您的build.gradle文件中包含以下依赖项

kapt "com.google.dagger:dagger-android-processor:2.18"
implementation "com.google.dagger:dagger-android-support:2.18"

如果有人在更新到
2.24
后来到这里,则此项已被删除:


您可以使用hassandroidjector来代替。

现在回答这个问题已经很晚了,但对于刚接触匕首世界的人来说,它可能很有用

为了避免在应用程序类中实现多个Dagger接口(如HasActivityInjector、HasServiceInjector等)的样板文件,已将其替换为HasAndroidInjector。现在您只需实现HasAndroidInjector,如下所示:

class DaggerExampleApplication : Application(), HasAndroidInjector{

       @Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>

       override fun androidInjector(): AndroidInjector<Any> = androidInjector
       override fun onCreate() {
         super.onCreate()
         //Your code
       }        
}
类DaggerExampleApplication:Application(),HasAndroidJector{
@注入lateinit var androidInjector:分派androidInjector
覆盖有趣的AndroidJector():AndroidJector=AndroidJector
重写fun onCreate(){
super.onCreate()
//你的代码
}        
}

除了@mbonnin和@Subhan的答案,从2.24版开始,
还有{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}
被删除。 如果仍要支持此旧实现,请使用2.23版本,该版本同时支持
HasAndroidJetor
具有{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}

下面是2.24版的外观

应用

class ExampleApp: Application(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../
class-ExampleApp:Application(),hasAndroidJector{
@注入
lateinit var androidInjector:分派androidInjector
覆盖有趣的AndroidJector():AndroidJector=AndroidJector
/..../
活动

class ExampleActivity: AppCompatActivity(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../
class ExampleActivity:AppCompativity(),HasAndroidObject{
@注入
lateinit var androidInjector:分派androidInjector
覆盖有趣的AndroidJector():AndroidJector=AndroidJector
/..../
碎片

class MoreFragment: Fragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../
类MoreFragment:Fragment(),HasAndroidJector{
@注入
lateinit var androidInjector:分派androidInjector
覆盖有趣的AndroidJector():AndroidJector=AndroidJector
/..../

可能是迟来的答案,但新的Dagger2依赖项带有
DaggerAppCompativity
DaggerFragment
类,这些类本身可用于注入活动和片段。因此,我们不再需要
HasActivityInjector
、自动注入方法或类似的方法。

更新您的版本到2.17并重建项目。@UmangBurman,我已经只使用了最新的一个依赖项。@rekire,当然我正在导入提到的类,通过我使用Android stdio的方式,它很酷,可以自行导入,或者通过Alt+Enter轻松导入。你能简单地解释一下哪个依赖项是什么吗?@Bajranghuda,简单地说,第一个和第四个是min Require红色表示dagger可以工作(dagger类+注释处理器),第二个和第五个是使用
Android
(如果您有appcompat,则第三个)。谢谢老板。你救了我一天,因为它是任何类型的。所以,我们也可以用它来注射工人。是吗?哈哈,还是当你尝试使用下面的
hasandoridejector
2.24
…D:很高兴,你发现它很有用。:)
class MoreFragment: Fragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../