Hello I'm new to Dagger
and I have crated a simple project to learn more about it. I have a class PermissionManager
that has activity as constructor parameter
class PermissionManager(activity: MainActivity) {
}
and my MainFragment
has a dependency on it. So I created BindingModule
@Module
interface BindingModule {
@DaggerScope(MainActivity::class)
@ContributesAndroidInjector(modules = [MainActivityModule::class])
fun provideMainActivity(): MainActivity
@FragmentScope
@ContributesAndroidInjector(modules = [MainFragmentModule::class])
fun provideMainFragment(): MainFragment
}
Here's my MainActivityModule
that provides PermissionManager
@Module
abstract class MainActivityModule private constructor() {
@Module
companion object {
@Provides
@JvmStatic
fun providePermissionManager(activity: MainActivity): PermissionManager = PermissionManager(activity)
}
}
and here's my MainFragmentModule
that has to use PermissionManager
that was created in my MainActivityModule
@Module
abstract class MainFragmentModule private constructor() {
@Module
companion object {
@JvmStatic
@Provides
@IntoMap
@ViewModelKey(MyTestViewModel::class)
fun provideModelFactory(
permissionManager: PermissionManager
): ViewModel = MyTestViewModel(permissionManager)
}
}
and here's what I get
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>
So first of all I don't understand why I can't use dependency that was created for activity
in my fragment
? Any ideas how to solve this?
EDIT:
Here's how Binding Module is used
@AppScope
@Component(
modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
BindingModule::class,
NetworkingModule::class
]
)
interface AppComponent : AndroidInjector<MyTestDaggerApp> {
/**
* AppComponent Builder interface. All implementation part is handled by a dagger compiler.
*/
@Component.Factory
interface Factory : AndroidInjector.Factory<MyTestDaggerApp>
}