0

我的项目中有一个控制器,它有一个套接字方法,我想在伴生对象中调用该方法。但不知何故,我无法做到这一点,因为我还需要将参数传递给伴生对象,而我不能。这是我的代码示例:

class WebSocketController @Inject() (cache:CacheApi)(implicit actorSystem:ActorSystem, materializer:Materializer) extends Controller {

def socket  = WebSocket.accept[JsValue , JsValue] { request => 
ActorFlow.actorRef(out => SocketHandlerClass.props(out,postActor))

}


}


/*My Companion Object */

object WebSocketController {

/* how to call socket method here ???*/

}
4

1 回答 1

1

尽管在技术上可行,但您不应该这样做,因为静态调用方法会使您的代码紧密耦合,并破坏依赖注入的其他好处,例如在测试中进行模拟。

你应该怎么做: 无论你打算在伴生对象中做什么,在其他对象中做,class然后注入那个类。

如何使用伴生对象做到这一点 请注意,这在 play 2.5 中已被弃用,将在 play 2.6 中删除,但如果您真的想在伴生对象中获取该类的实例,您可以这样做:

Play.current.injector.instanceOf[WebSocketController]

然而,除了这基本上击败了依赖注入之外,从外部调用控制器的方法看起来是一个相当不幸的设计选择。控制器不应包含任何逻辑 - 如上所述 - 您应该将逻辑提取到另一个类并将其注入控制器。

于 2016-07-01T10:37:58.317 回答