可以以这样一种方式注释提供程序类,使用定义的绑定将它们“声明”到 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