【问题标题】:Kotlin+Dagger2 @Named annotation in Module provider method usage模块提供程序方法使用中的 Kotlin+Dagger2 @Named 注解
【发布时间】:2017-08-22 20:54:55
【问题描述】:

我在 Kotlin 中使用 Dagger 2 @Named 注释时遇到问题,这阻止了我将 Dagger 图迁移到 Kotlin。当我需要在 Dagger 模块方法中注入 @Named 参数时,就会出现问题。在这种情况下,我不是通过构造函数或字段注入它。我已经尝试了所有Kotlin annotation use-sites targets,但似乎没有一个在方法参数中起作用。请,任何解决方案将不胜感激。以下是转换为 Kotlin 后无法编译的部分 java 代码:

@Module
public final class MyModule {

   (...)

   @Provides
   @Singleton
   LoginStore provideLoginStore(@Named("main_dao_session") DaoSession mainDaoSession, @Named("demo_dao_session") DaoSession demoDaoSession) {
      return new LoginStoreImpl(mainDaoSession, demoDaoSession);
   }

   (...)

}

【问题讨论】:

标签: java android kotlin dagger-2


【解决方案1】:

use-site 目标在这种情况下不适用,因为您正在处理函数参数。需要用构造函数指定目标,因为每个构造函数参数在后台都会生成大量代码。

像往常一样使用注释:

@Provides
@Singleton
fun provideLoginStore(@Named("main_dao_session") mainDaoSession: DaoSession, @Named("demo_dao_session") demoDaoSession: DaoSession): LoginStore {
    return LoginStoreImpl(mainDaoSession, demoDaoSession)
}

【讨论】:

  • 这是我尝试的第一件事,但没有结果,但我会再次检查。谢谢!
  • 我在一个小型 POC 中测试了您的解决方案,并且成功了!我不知道为什么我上次不能坚持下去。谢谢!
  • 我仍然遇到问题,但我现在意识到这是 Kotlin 的 greenDAO 库问题,而不是 Dagger 的问题。再次感谢!
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
相关资源
最近更新 更多