模块提供程序方法用法中的Kotlin + Dagger2 @Named注释

时间:2017-08-22 20:54:55

标签: java android kotlin dagger-2

我在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);
   }

   (...)

}

1 个答案:

答案 0 :(得分:0)

在这种情况下,

use-site targets不适用,因为您正在处理函数参数。需要使用构造函数指定目标,因为在后台为每个构造函数参数生成了大量代码。

只需像往常一样使用注释:

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