android - 在 Android Dagger 2 中找不到 DaggerAppComponent 和 AppComponent 类
问题描述
我正在使用 Android Studio 和 Kotlin 开发一个 Android 应用程序。我正在将仪器测试添加到我的项目中。我现在要做的是尝试在我的测试中使用 Dagger 2 将模拟依赖项注入到对象中。我正在关注本教程,https://code.luasoftware.com/tutorials/android/setup-dagger2-for-android-kotlin/。我通过在我的应用程序 gradle 依赖项部分添加它来安装所需的依赖项。
implementation 'com.google.dagger:dagger:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'
provided 'javax.annotation:jsr250-api:1.0'
kapt "com.google.dagger:dagger-android-processor:2.15"
implementation "com.google.dagger:dagger-android:2.15"
implementation "com.google.dagger:dagger-android-support:2.15"
然后我在依赖项部分之前添加了以下代码段
kapt {
generateStubs = true
}
我也添加了这个。
apply plugin: 'kotlin-kapt'
然后在我的自定义应用程序类中,我尝试使用 DaggerAppComponent 类。好像这个类没有随包一起提供。
我的安装中缺少什么以及如何修复它?
解决方案
我对 Dagger 使用以下 gradle 依赖项:- 在 version.gradle 文件中
def dagger = [:]
dagger.runtime = "com.google.dagger:dagger:2.24"
dagger.android = "com.google.dagger:dagger-android::2.24"
dagger.android_support = "com.google.dagger:dagger-android-support::2.24"
dagger.compiler = "com.google.dagger:dagger-compiler::2.24"
dagger.android_support_compiler = "com.google.dagger:dagger-android-processor::2.24"
deps.dagger = dagger
app 模块的 build.gradle 使用以下代码:-
implementation deps.dagger.runtime
implementation deps.dagger.android
implementation deps.dagger.android_support
kapt deps.dagger.android_support_compiler
kapt deps.dagger.compiler
请创建一个`MyApplicationAppInjector 类
class MyApplicationAppInjector : AppInjector() {
fun init(app: ApplicationController) {
DaggerMyAppComponent.builder().application(app)
.build().inject(app)
app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
handleActivity(activity as AppCompatActivity)
}
override fun onActivityStarted(activity: Activity) {
}
override fun onActivityResumed(activity: Activity) {
}
override fun onActivityPaused(activity: Activity) {
}
override fun onActivityStopped(activity: Activity) {
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {
}
override fun onActivityDestroyed(activity: Activity) {
}
})
}
}
创建 MyAppComponent 接口为:-
@SuppressWarnings("unchecked")
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
)
interface MyAppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): MyAppComponent
}
fun inject(app: ApplicationController)
}
创建一个类
open class AppInjector {
fun handleActivity(activity: AppCompatActivity) {
if (activity is HasAndroidInjector) {
AndroidInjection.inject(activity)
}
activity.supportFragmentManager
.registerFragmentLifecycleCallbacks(
object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentCreated(
fm: FragmentManager,
f: Fragment,
savedInstanceState: Bundle?
) {
AndroidSupportInjection.inject(f)
}
}, true
)
}
}
并在您的应用程序类的 onCreate() 方法中使用此代码:-
`MyApplicationAppInjector().init(this)``
我希望它能解决你的问题
推荐阅读
- python - 如何读取文本文件,使用字典替换字符,然后保存到新文件
- javascript - 如何处理 ECS 模式中的冲突?
- mysql - 更新工资查询 MySQL
- swift - 如何从 spritekit 中的节点中删除颜色
- c# - C# Cast / Unbox 使用变量类型
- python - PyTorch 将总和查找数量矢量化到存储桶中
- java - 如何使用 Java 将字符串 21/01/2019 (dd/MM/yyyy) 转换为相同格式的 Date 对象
- vector - 关于如何从一个向量复制到另一个向量的问题
- amazon-web-services - 通过 Route 53 的 S3 静态网站。如果路径不存在,则重定向到页面
- python - 如何将 pd.cut 与大量垃圾箱一起使用?