2016-10-14 115 views
0

在Play 2.5.X中,我们需要使用依赖注入。下面的代码是从游戏的文档的例子:在Play中创建依赖注入类的实例2.5.X

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller { 
    def index = Action { 
    Ok(views.html.index("Your new application is ready.")) 
    } 
} 

如果我定义了一些额外的helper方法getXXXHomeController,需要从别的地方访问它,我怎么可以访问此方法?

我真正感兴趣的是如何创建HomeController的实例,以便我可以使用homeControllerInstance.getXXX

如果我试图像下面创建实例:

val homeControllerInstance = new HomeController() 

我得到错误:

Compilation error[not enough arguments for constructor HomeController: (configuration: play.api.Configuration)HomeController 

我试图改变HomeController类声明:

class HomeController @Inject(configuration: play.api.Configuration) extends Controller 

但是这给了我错误:

classfile annotation arguments have to be supplied as named arguments 

有人能解释一下,我该如何解决这个问题?

+0

这个辅助方法是什么?你确定控制器是最好的地方吗? – michaJlS

+0

你的问题不是很清楚。你在问如何将控制器声明为可注入组件? – Nio

+0

这是单元测试吗?如果是这种情况,您可能需要查看指南https://www.playframework.com/documentation/2.5.x/ScalaTestingWithGuice –

回答

0

如果你想从使用谷歌果汁Xyz类使用HomeController类的你getXXX方法,试试这个

import com.google.inject.Inject 

class Xyz @Inject()(homeCon: HomeController) { 
    homeCon.getXXX 
} 

虽然我不知道你的实际问题是什么,但希望这有助于。

0

你应该实例化

play.api.Play.current.injector.instanceOf(classOf[UID]) 
0

类有时候,你需要把一个新行@Inject关键字后,所以这个:

class HomeController @Inject(a :IWantThisInjected) (configuration: play.api.Configuration)

失败与错误,但移动第一组参数到下一行可以修复它:

class HomeController @Inject (a :IWantThisInjected) (configuration: play.api.Configuration)