我试图在我的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。
快乐编码:-)
答案 0 :(得分:42)
如果有人在更新为2.24
之后来到这里,则将其删除:https://github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c10。
您可以改用HasAndroidInjector
。
答案 1 :(得分:9)
除了@mbonnin和@Subhan的答案外,还删除了起始版本2.24 Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}
。
如果仍要支持此旧实现,请使用同时支持HasAndroidInjector
和Has{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
/..../
答案 2 :(得分:6)
回答还为时已晚,但对匕首世界的新手来说可能有用!
已将其替换为HasAndroidInjector,以避免在Application类中实现多个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 :(得分:3)
我的依赖项如下:
false
如果您使用的是appcompat,则需要//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}"
一个。
support
是指所需的匕首版本(例如2.16)。
了解有关依赖项here的更多信息。
答案 4 :(得分:0)
HasActivityInjector
是在新的dagger android支持模块中引入的。在您的 build.gradle 文件中包括以下依赖项。
kapt "com.google.dagger:dagger-android-processor:2.18"
implementation "com.google.dagger:dagger-android-support:2.18"
答案 5 :(得分:0)
如果您是Android开发者,并且使用Kotlin(以获得更快的代码并避免了很多样板代码),则可以使用 Koin -
面向Kotliin开发人员的实用的轻量级依赖注入框架。 用纯Kotlin编写,仅使用功能解析:无代理,无代码生成,无反射。
相信我,这比dagger2容易。您可以找到更多详细信息here和official website。
答案 6 :(得分:0)
可能是迟到的答案,但新的 Dagger2 依赖项带有 DaggerAppCompatActivity
和 DaggerFragment
类,这些类对于单独注入活动和片段很有用。因此,我们不再需要 HasActivityInjector
、autoInjection 方法或类似的东西。