時間を割いて、私の現在のプレイの問題を見ていただきありがとうございます。
現在バージョン 2.3 の Playframework をまだ試しています。
現時点では、依存性注入を理解しようとしています。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.]
これは、問題が特定の DI フレームワークに関連付けられていないため、Playframework のより普遍的な部分が欠けていると思います。
それで、私がscaladiで試したことを説明しましょう(guiceを使用した実用的なソリューションも高く評価されます):
conf/routes でルートを定義します。
GET / @controllers.Application.index
(Play 2.1 以降でサポートされている管理対象コントローラーのサポートのために @ を追加しました)
コントローラーの定義:
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 /」の下にも登録された別のルートの2番目のコントローラーでした。このコントローラーはまだ管理されていません。したがって、上記の手順を2番目のコントローラーに適用した後、すべて正常に機能しました.