无法在android dagger 2中解析HasActivityInjector
我试图在我的android应用程序中实现HasActivityInjector,但它表明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
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
/..../