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

scala对象(非类)的依赖注入

  •  -1
  • user461112  · 技术社区  · 7 年前

    我有一个导入“import play.api.libs.ws.WSClient”,我想在我的对象中使用它

    Object X {
    ...
    
    }
    

    1 回复  |  直到 7 年前
        1
  •  4
  •   rethab    7 年前

    将依赖注入对象是不可能的。

    您有两种选择:

    val wsClient = Play.current.injector.instanceOf[WSClient]
    

    如果您的代码需要驻留在对象中,该怎么办

    def myMethod(wsClient: WSClient) = // foo
    

    如果您使用的是一个遗留应用程序,其中有对象并且需要注入依赖项,我认为“改善”这种情况并朝着正确方向迈出一步的一种方法是提供对注入类的访问,如下所示:

    object MyObject {
      private def instance = Play.current.injector.instanceOf[MyObject]
      def myMethod(param: String): String =
        instance.myMethod(param)
    }
    
    class MyObject @Inject() (wsClient: WSClient) {
      def myMethod(param: String): String = 
       // foo
    }