Dependency injection 将播放依赖项注入模块配置为特征

Dependency injection 将播放依赖项注入模块配置为特征,dependency-injection,playframework,Dependency Injection,Playframework,在: 强烈建议,除了为JSR-330 DI提供一个模块外,插件还提供了一个Scala特性,可以手动构造模块。这允许在不需要运行时依赖项注入提供程序的情况下使用模块 如果我的模块的构造依赖于play.api.Configuration,那么我可以使用ConfigFactory.load(“应用程序”)创建依赖项,然后像这样为我的模块创建工厂吗: object MyModule { def apply(config: Config) = { val credentials = /* co

在:

强烈建议,除了为JSR-330 DI提供一个模块外,插件还提供了一个Scala特性,可以手动构造模块。这允许在不需要运行时依赖项注入提供程序的情况下使用模块

如果我的模块的构造依赖于
play.api.Configuration
,那么我可以使用
ConfigFactory.load(“应用程序”)
创建依赖项,然后像这样为我的模块创建工厂吗:

object MyModule {
  def apply(config: Config) = {
    val credentials = /* construct from config */
    new MyModule(credentials)
  }
}

我想我在想,如果模块本身需要依赖注入资源,我应该如何在trait中构造模块?如果我的trait需要其他东西,比如
环境

你可以在trait中定义抽象成员。这意味着需要模块的代码必须提供这些功能。比如你的例子

//您的定义
性状MyModuleComponents{
def配置:配置
lazy val模块=新的MyModule(配置)
}
//用法
类MyApp扩展了MyModuleComponents{
//在此处提供配置
val配置=ConfigFactory.load(“应用程序”)
//使用模块
模块.doSomething()
}
举个更好的例子,你可以看一个例子