0

可以以这样一种方式注释提供程序类,使用定义的绑定将它们“声明”到 Toolpick 是没有用的installModules

我有一个配置类:

data class Config(val props: Map<String, String>)

以及使用这样一个配置类的应用程序类:

@InjectConstructor
class MyApp(@Named("appConfig") val config: Config)

以下代码正在工作:

    val app = KTP.openRootScope()
        .installModules( // I want to remove this installModules call
            module {
                bind<Config>().withName("appConfig").toProvider(MyAppConfigProvider::class)
            }
        )
        .getInstance(MyApp::class.java)

是否可以编写一个 Provider 以达到相同的效果(但没有 installModules 方法调用)?

我尝试过这样的事情,但它不起作用:

@ProvidesSingleton  // in order to declare it as a Provider?
@Named("appConfig") // tell that is it providing a named instance?
@Singleton          // instance belonging to the root scope?
@InjectConstructor  // so toothpick can "see" this class?
class MyAppConfigProvider: Provider<Config> {
    override fun get() = Config(mapOf("dbPort" to "12"))
}

这是演示该行为的要点:https ://gist.github.com/bfreuden/3c370e1214d963b62ee1c96912d4c8dd

4

0 回答 0