首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于具有静态提供方法的dagger-2模块,使用Hilt @IntallIn

对于具有静态提供方法的dagger-2模块,使用Hilt @IntallIn
EN

Stack Overflow用户
提问于 2020-11-05 06:03:40
回答 2查看 505关注 0票数 1

在执行匕首-2的刀柄迁移时,得到了一个模块的错误。

错误:

代码语言:javascript
复制
FooModule.Companion is listed as a module, but it is a companion
object class. 
Add @Module to the enclosing class 
and reference that instead.

希尔特之前的

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

 @Binds
 @FooScope
 abstract fun bindsManager(impl: FooManagerImpl): FooManager
 
 @Module
 companion object {
     
   @Provides
   @FooScope 
   @JvmStatic
   fun providesConfig(prefs: SharedPreferences): FooConfig = FooConfigImpl(prefs) 
 }

}

希尔特后的

代码语言:javascript
复制
@InstallIn(ApplicationComponent::class)
@Module
abstract class FooModule {

 @Binds
 @FooScope
 abstract fun bindsManager(impl: FooManagerImpl): FooManager
 
 @InstallIn(ApplicationComponent::class)
 @Module
 companion object {
     
   @Provides
   @FooScope 
   @JvmStatic
   fun providesConfig(prefs: SharedPreferences): FooConfig = FooConfigImpl(prefs) 
 }

}

迁移文档参考:https://developer.android.com/codelabs/android-dagger-to-hilt#4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 08:34:10

您需要将companion object更改为object

代码语言:javascript
复制
@InstallIn(ApplicationComponent::class)
@Module
abstract class FooModule {

 @Binds
 @FooScope
 abstract fun bindsManager(impl: FooManagerImpl): FooManager
 
 @InstallIn(ApplicationComponent::class)
 @Module
 object AppModule{
     
   @Provides
   @FooScope 
   fun providesConfig(prefs: SharedPreferences): FooConfig = FooConfigImpl(prefs) 
 }

}
票数 0
EN

Stack Overflow用户

发布于 2020-11-05 15:45:24

匕首2.26使在@Component@Subcomponentmodules参数中包含一个伴生对象模块是错误的。相反,如果包含的类是模块,则自动包含同伴对象。Hilt的@InstallIn简单地将带注释的模块添加到生成的组件类中,因此,如果用@InstallIn注释伴生对象,则会得到相同的错误。

从伴生对象中删除@InstallIn (和@Module),一切都应该正常工作。

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

https://stackoverflow.com/questions/64691976

复制
相关文章

相似问题

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