我有如下所示的类:但是我有一个问题,我不能为HomeRouter提供依赖。你们能帮我解决这个问题吗
class HomeRouter @Inject constructor (activity: Activity) : HomeContract.Router {
override fun finish() {
Timber.e("Finish")
}
}和模块
@Module
abstract class RouterModule {
@Binds
abstract fun bindHomeRouter(homeRouter: HomeRouter):HomeRouter
}在AppComponent中
@Singleton
@ActivityScope
@Component(
modules = [
ActivityBuilder::class,
AppModule::class,
NetworkModule::class,
AndroidSupportInjectionModule::class,
FragmentModule::class,
InteractorModule::class,
PresenterModule::class,
RouterModule::class
]
)
interface AppComponent : AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApplication): Builder
fun build(): AppComponent
}
}例外情况如下:
/src/src/viper-architecture/app/build/tmp/kapt3/stubs/debug/com/appname/di/component/AppComponent.java:13: error: [Dagger/MissingBinding] android.app.Activity cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.appname.MyApplication> {
^
android.app.Activity is injected at谢谢大家。
发布于 2022-07-29 18:53:52
HomeRouter需要一个活动实例,但是尽管它的@ActivityScope注释与@Singleton相邻(错误地使这两个作用域看起来等效),AppComponent仍然只接收MyApplication实例。对于一般的Android Activity或者您的特定活动MyActivity,都没有绑定。
这里最好的选择是遵循注入活动对象的dagger.android指南,这将指示您手动创建@Subcomponent或使用@ContributesAndroidInjector自动创建活动对象。无论您选择子组件还是贡献方法,您都将给出您的@ActivityScope,并将您的RouterModule设置为在modules={}中列出。
因此,您的RouterModule将无法直接从您的AppComponent中的任何东西中访问--这是怎么可能的,因为AppComponent中的任何东西都可以在任何活动实例之前存在或跨越其中的几个实例?但是您将能够从您的活动中获取一个HomeRouter实例,并确保每个活动都有一个不同的HomeRouter实例。
https://stackoverflow.com/questions/73162565
复制相似问题