Android 如果没有@Inject构造函数或@Provides注释方法,则无法提供Dagger类
你好,我是新来的Android 如果没有@Inject构造函数或@Provides注释方法,则无法提供Dagger类,android,dagger-2,Android,Dagger 2,你好,我是新来的Dagger,我已经编写了一个简单的项目来了解更多信息。我有一个类PermissionManager,它将活动作为构造函数参数 class PermissionManager(activity: MainActivity) { } 我的MainFragment依赖于它。所以我创建了BindingModule @Module interface BindingModule { @DaggerScope(MainActivity::class) @Con
Dagger
,我已经编写了一个简单的项目来了解更多信息。我有一个类PermissionManager
,它将活动作为构造函数参数
class PermissionManager(activity: MainActivity) {
}
我的MainFragment
依赖于它。所以我创建了BindingModule
@Module
interface BindingModule {
@DaggerScope(MainActivity::class)
@ContributesAndroidInjector(modules = [MainActivityModule::class])
fun provideMainActivity(): MainActivity
@FragmentScope
@ContributesAndroidInjector(modules = [MainFragmentModule::class])
fun provideMainFragment(): MainFragment
}
@Module
abstract class MainFragmentModule private constructor() {
@Module
companion object {
@JvmStatic
@Provides
@IntoMap
@ViewModelKey(MyTestViewModel::class)
fun provideModelFactory(
permissionManager: PermissionManager
): ViewModel = MyTestViewModel(permissionManager)
}
}
这是我的MainActivityModule
,它提供了PermissionManager
@Module
abstract class MainActivityModule private constructor() {
@Module
companion object {
@Provides
@JvmStatic
fun providePermissionManager(activity: MainActivity): PermissionManager = PermissionManager(activity)
}
}
这是我的main片段模块
,它必须使用在我的main活动模块
中创建的PermissionManager
@Module
interface BindingModule {
@DaggerScope(MainActivity::class)
@ContributesAndroidInjector(modules = [MainActivityModule::class])
fun provideMainActivity(): MainActivity
@FragmentScope
@ContributesAndroidInjector(modules = [MainFragmentModule::class])
fun provideMainFragment(): MainFragment
}
@Module
abstract class MainFragmentModule private constructor() {
@Module
companion object {
@JvmStatic
@Provides
@IntoMap
@ViewModelKey(MyTestViewModel::class)
fun provideModelFactory(
permissionManager: PermissionManager
): ViewModel = MyTestViewModel(permissionManager)
}
}
这是我得到的
com\nav\component\di\AppComponent.java:12: error: [Dagger/MissingBinding] com.nav.component.utils.PermissionManager cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.nav.component.MyTestDaggerApp>
将片段作为
BindingModule
的子组件,从中获取绑定。不要忘记使main活动
实现hasandroidjector
(如果尚未实现)
将片段作为
BindingModule
的子组件,从中获取绑定。不要忘记使main活动
实现hasandroidjector
(如果尚未实现)
请说明如何使用
BindingModule
。我认为出现此问题的原因是试图将您的活动注入PermissionManager@ZaferCelaloglu你为什么这么想?我认为,MainFragmentModule
看不到在MainActivityModule
中创建的对象。您可以将@Inject构造函数添加到PermissionManager中,然后尝试编译我添加的,相同问题:/n请说明如何使用BindingModule
。我认为出现此问题的原因是试图将您的活动注入PermissionManager@ZaferCelaloglu你为什么这么想?我认为,MainFragmentModule
看不到在MainActivityModule
中创建的对象。您能否将@Inject构造函数添加到PermissionManager中,然后尝试编译我添加的相同问题:/