我试图在learn pourposes的种子项目中添加dagger2(我不是专家),但我有同样的问题:
E: /Users/foca/projects/personalProjects/bar-droid-application/bar-droid/app/build/tmp/kapt3/stubs/debug/com/bar/bar_droid/di/AppC: 8:错误:[Dagger/MissingBind]AccessScreenProvider_ProvideRoleSelectorFragmentFactory_javax.inject.如果没有@Provides-anttated方法,则无法提供注册库。公共抽象接口AppComponent扩展dagger.android.AndroidInjector{^A具有匹配键的绑定存在于组件:_com.bar.bar_java.util.。RoleSelectionFragmentSub_droid.ui.accessflow.di._注册库注入_com.bar.bar_UserSignstrationUseCase(registerRepository,...)_droid.domain.repository._UserregistrationUseCase注入_com.bar.bardroid.ui.accessflow.roleselectordroid.domain.interactor.userregistration.fragment.viewmodel.RoleSelectionViewModel(...,userregistrationUseCase)com.bar.bardroid.ui.accessflow.roleselectordroid.domain.interactor.userregistration.RoleSelectionViewModel注入com.bar.barcom.bar.bardroid.ui.di.ViewModelMomponent.javaRoleSelectionViewModel(角色选择视图模型)com.bar.bar地图,droid.domain.repository.提供商
这里我的代码:
应用程序:
class MainApplication : Application(), HasAndroidInjector {
@Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
// Starts Dagger
DaggerAppComponent.builder()
.application(this)
.build()
.inject(this)
}
override fun androidInjector(): AndroidInjector<Any> = androidInjector
}
匕首组件:
@Singleton
@Component(
modules = [AndroidSupportInjectionModule::class,
ApplicationModule::class,
RoomDatabaseModule::class,
FirebaseModule::class,
GoogleModule::class,
ActivityBuilderModule::class]
)
interface AppComponent : AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(app: Application): Builder
fun build(): AppComponent
}
}
ActivityBuilderModule:
@Module
abstract class ActivityBuilderModule {
@PerActivity
@ContributesAndroidInjector(modules = [AccessScreenProvider::class, AccessScreenDependencyProvider::class])
abstract fun bindAccessActivity(): AccessActivity
@PerActivity
@ContributesAndroidInjector(modules = [MainFlowProvider::class])
abstract fun bindMainActivity(): MainActivity
}
AccessActivity的片段:
@Module
abstract class AccessScreenProvider {
@PerFragment
@ContributesAndroidInjector(modules = [ViewModelModule::class, LoginSelectorProvider::class])
abstract fun provideLoginSelectorFragmentFactory(): LoginFragment
@PerFragment
@ContributesAndroidInjector(modules = [ViewModelModule::class])
abstract fun provideMailPasswordFragmentFactory(): MailPasswordSignUpFragment
@PerFragment
@ContributesAndroidInjector(modules = [ViewModelModule::class, RoleSelectionProvider::class])
abstract fun provideRoleSelectorFragmentFactory(): RoleSelectionFragment
}
ViewModelModule:
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)
@Module
abstract class ViewModelModule {
@Binds
abstract fun provideViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@Binds
@PerFragment
@IntoMap
@ViewModelKey(LoginViewModel::class)
abstract fun provideLoginViewModel(loginViewModel: LoginViewModel): ViewModel
@Binds
@PerFragment
@IntoMap
@ViewModelKey(MailPasswordSignUpViewModel::class)
abstract fun provideMailPasswordSighUpViewModel(mailPasswordSignUpViewModel: MailPasswordSignUpViewModel): ViewModel
@Binds
@PerFragment
@IntoMap
@ViewModelKey(RoleSelectionViewModel::class)
abstract fun provideRoleSelectionViewModel(roleSelectionViewModel: RoleSelectionViewModel): ViewModel
}
最后,为角色选择提供:
@Module
class RoleSelectionProvider {
@Provides
@PerFragment
fun provideRealAuthDataSource(fireBaseAuth: FirebaseAuth): UserAuthDataSource = RealUserAuthDataSource(fireBaseAuth)
@Provides
@PerFragment
fun provideRegisterRepository(realUserAuthDataSource: RealUserAuthDataSource, userProfileDao: UserProfileDao): RegisterRepository {
return RegisterRepositoryImpl(realUserAuthDataSource, userProfileDao)
}
}
我唯一的地方,我注入注册RepositoryImpl是在用户注册用例,我不知道我做错了什么。
奇怪的是,您在两个地方使用它:ViewModelModule。这很可能是问题和密钥复制错误。“组件中存在具有匹配键的绑定:”
此外,在provideMailPasswordFragmentFactory中,您只传递ViewModelModule,但在provideRoleSelectorFragmentFactory中,您同时传递ViewModelModule和RoleSelectionProvider。在第一种情况下,您缺少提供存储库的RoleSelectionProvider提供的依赖项。
@PerFragment
@ContributesAndroidInjector(modules = [ViewModelModule::class])
abstract fun provideMailPasswordFragmentFactory(): MailPasswordSignUpFragment
@PerFragment
@ContributesAndroidInjector(modules = [ViewModelModule::class, RoleSelectionProvider::class])
abstract fun provideRoleSelectorFragmentFactory(): RoleSelectionFragment
我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App
我想在我的片段(HomeFragment)中注入一个依赖项(HomeViewModel)。 我有一个类(HomeViewModelImpl)实现了该抽象(HomeViewModel),在这个类中,我当然覆盖了父级的方法。 抽象类(HomeViewModel)是从BaseViewModel扩展而来的抽象类。 BaseViewModel是一个普通的开放类,它从Android生命周期组件的ViewMod
我正试图从这篇中级文章中学习Dagger2,并将RequestQueue作为活动级依赖项传递:https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f我可以很好地创建应用程序组件,但我在ContributesAndroidInjector方面遇到了很多麻烦。应用类别: 应
所以我正在尝试将我的整个应用程序从匕首迁移到刀柄,显然我无法注入活动和碎片。 我的活动: 我的片段: 我的应用程序类: 像这样注入我的活动: 它抛出了这个错误: 项目级成绩: 应用级 Gradle(所有 3 个模块): 会不会是我的活动和片段扩展了不能用@ AndroidEntryPoint注释的基,因为它们有类型参数??救命啊! 同样在 dagger2 中,我使用了如下接口: 它的工作,但柄据说
我正在为每个测试方法构建一个模块,该模块在测试方法开始执行之前侦听TestNG测试并执行某些操作。我只想知道测试(方法)何时开始执行,方法的名称和测试类的可选名称。 我成功地为testNG的调用程序调用编写了切入点。它成功了。 相反,我想知道的是,每个测试方法都用org注释。测试NG。注释。Test,我如何编写切入点来捕捉用org注释的每个测试方法的执行连接点。测试NG。注释。测试? 这是我的测试
问题内容: 我正在尝试在我的项目中实现dagger2,但遇到错误“ android.app.Application必须在没有@Inject构造函数或@Provides注释方法的情况下才能提供 ”。 这是我的代码: App.java di / AppModule.java di / AppComponent.java di / TestClassModule.java di / TestClassC