首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用Dagger和Kotlin绑定结构体中的依赖项

不能用Dagger和Kotlin绑定结构体中的依赖项
EN

Stack Overflow用户
提问于 2022-07-29 06:42:00
回答 1查看 40关注 0票数 1

我有如下所示的类:但是我有一个问题,我不能为HomeRouter提供依赖。你们能帮我解决这个问题吗

代码语言:javascript
复制
class HomeRouter @Inject constructor (activity: Activity) : HomeContract.Router {

    override fun finish() {
        Timber.e("Finish")
    }
}

和模块

代码语言:javascript
复制
@Module
 abstract class RouterModule {

    @Binds
     abstract fun bindHomeRouter(homeRouter: HomeRouter):HomeRouter
     
}

在AppComponent中

代码语言:javascript
复制
@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
    }

}

例外情况如下:

代码语言:javascript
复制
/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

谢谢大家。

EN

回答 1

Stack Overflow用户

发布于 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实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73162565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档