代码之家  ›  专栏  ›  技术社区  ›  tgk

配置一个作为特征的游戏依赖注入模块

  •  0
  • tgk  · 技术社区  · 7 年前

    Play module scaladocs 以下内容:

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

    如果模块的构造取决于 play.api.Configuration 我能用一下吗 ConfigFactory.load("application") 要创建这种依赖关系,然后像这样为我的模块创建一个工厂:

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

    我想我在想,如果模块本身需要依赖性可注入资源,我应该如何构造一个特征中的模块?如果我的性格需要别的东西,比如 environment 是吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   vdebergue    7 年前

    你可以在你的特性中定义抽象成员。这意味着需要模块的代码必须提供这些代码。举个例子

    // your definition
    trait MyModuleComponents {
      def configuration: Configuration
    
      lazy val module = new MyModule(configuration)
    }
    
    // usage
    class MyApp extends MyModuleComponents {
      // provide configuration here
      val configuration = ConfigFactory.load("application")
    
      // use module
      module.doSomething()
    }
    

    举个更好的例子,你可以看看 how play does it for WsClient 例如