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中,然后尝试编译我添加的相同问题:/