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
}
这是我的
MainActivityModule
许可证管理器
@Module
abstract class MainActivityModule private constructor() {
@Module
companion object {
@Provides
@JvmStatic
fun providePermissionManager(activity: MainActivity): PermissionManager = PermissionManager(activity)
}
}
MainFragmentModule
必须使用
是在我的生活中创造的
主活动模块
@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>
所以首先我不明白为什么我不能使用为
activity
在我的
fragment
编辑:
下面是如何使用绑定模块
@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>
}