提前感谢你花时间看看我目前的游戏问题。
我还在尝试Playframework,目前在2.3版本中。
目前我试图将依赖注入计算出来。 我遵循激活器中为guice和scaladi提供的教程,并且总是导致相同的编译器错误:
play.PlayExceptions$CompilationException: Compilation error[object Application is not a member of package controllers Note: class Application exists, but it has no companion object.]
这让我觉得我错过了Playframework中更普遍的部分,因为问题与特定的DI框架无关。
所以,让我描述一下我用scaladi尝试的内容(任何使用guice的解决方案也会受到赞赏):
在conf / routes中定义路由:
GET / @controllers.Application.index
(添加@以支持自播放2.1 afaik以来支持的托管控制器)
定义控制器:
package controllers
import scaldi.{Injector, Injectable}
import scala._
import play.api._
import play.api.mvc._
import services.GreetingService
class Application(implicit inj: Injector) extends Controller with Injectable {
val greetService= inject [GreetingService]
def index = Action {
Ok("Here I am")
}
}
定义用于修改app \ Global.scala下的GlobalSetting的全局:
import modules.ApplicationModule
import play.api.GlobalSettings
import scaldi.play.ScaldiSupport
object Global extends GlobalSettings with ScaldiSupport {
def applicationModule = new ApplicationModule
}
最后是app \ modules \ ApplicationModule.scala:
下的应用程序模块package modules
import controllers.Application
import scaldi.Module
class ApplicationModule extends Module {
binding to new Application
}
所以我真的很感激任何帮助,以弄清楚为什么Application类不能位于包控制器中。 同样,我会很高兴任何有效的解决方案可能是guice或scaladi。
谢谢!
修改 问题是另一个路径的第二个控制器也在“/ conf / routes /”下注册。这个控制器尚未管理。因此,在我将上述步骤调整到第二个控制器后,一切正常。
答案 0 :(得分:2)
所以似乎错误的是配置了另一条未管理的路由。
这导致object Application is not a member of package controllers Note: class Application exists, but it has no companion object.
错误。
因为我的其他控制器(用户)确实是一个对象,而不是一个类。 因此将UserController转移到class和scaldi修复了这个问题。控制器的传输与我上面描述的Applicationcontroller相同。
答案 1 :(得分:1)
使用@
中的方法初始化控制器实例(使用Global
表示法在路由中声明):
def getControllerInstance[A](controllerClass: Class[A]): A
因此,如果您想插入DI框架,则需要覆盖此方法以将Class[A]
转换为A
的实例。
答案 2 :(得分:0)
就我而言,我通过在build.sbt中添加以下内容来解决:
setup: function(ed) {
ed.addButton('well', {
title: 'Make Well',
icon: false,
onclick: function() {
var text = ed.selection.getContent({
'format': 'html'
});
if (text && text.length > 0) {
ed.execCommand('mceInsertContent', false,
'<div class="well">' + text + '</div>');
}
}
});
},
toolbar: "well"