HasActivityInjector在Android Dagger 2中无法解析

Baj*_*dda 6 android dependency-injection kotlin dagger-2

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

apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的代码-

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
}
Run Code Online (Sandbox Code Playgroud)

我不知道我还必须包括哪些其他依赖项才能工作,如果有人以前这样做过,可以帮助我。

此处找到最新的Dagger 2版本。

快乐的编码:-)

mbo*_*nin 36

如果有人在更新到后来到这里,则将其2.24删除:https : //github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c10

您可以HasAndroidInjector改用。


kur*_*tan 10

In addition to @mbonnin and @Subhan's answer, starting version 2.24, Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver} are removed. If you still want to support this old implementation, use version 2.23 which supports both HasAndroidInjector and Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}.

here's what it should look like on version 2.24

Application

class ExampleApp: Application(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

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

/..../
Run Code Online (Sandbox Code Playgroud)

Activity

class ExampleActivity: AppCompatActivity(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

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

/..../
Run Code Online (Sandbox Code Playgroud)

Fragment

class MoreFragment: Fragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

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

/..../
Run Code Online (Sandbox Code Playgroud)


Dem*_*god 5

我的依赖项如下所示:

//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}"
Run Code Online (Sandbox Code Playgroud)

support如果您使用的程序兼容性是需要一个。而 the${libs.dagger}指的是所需的匕首版本(例如 2.16)。在此处阅读有关依赖项的更多信息。


Sub*_*Ali 5

现在回答还为时已晚,但对于匕首世界的新手来说可能有用!

为了避免在Application类中实现多个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
       }        
}
Run Code Online (Sandbox Code Playgroud)

  • 我很高兴,你发现它很有用。:) (2认同)