0

postgres でテーブルを手動で作成することを避ける目的で、play-silhouette-seed サンプルを少し改善しようとしています。で使用されている実装に従おうとしました

https://github.com/playframework/play-slick/tree/master/samples/computer-database

、しかし、Bind(classOf[InitialData]).asEagerSingleton() を InitialData クラスに追加すると、インジェクションに問題が発生します。取得: コンストラクターの注入エラー、java.lang.RuntimeException: 開始されたアプリケーションはありません。仮アプリをアップロードしました

https://github.com/renexdev/Play-Auth-Slick-Seed-Load-Schema

. UserImpl.scala のいくつかのメソッドを変更しましたが、重要なファイルは、アプリの起動時に bind(classOf[InitialData]).asEagerSingleton() 内の抽象モジュールによって呼び出される /app/modules/InitialData.scala です。
実行コンテキストを initialData クラスに渡すよう提案されました。で提案されている def doSomething(implicit ec: ExecutionContext) を試しました

https://github.com/alexandru/scala-best-practices/blob/master/sections/4-concurrency-parallelism.md

および import play.api.libs.concurrent.Execution.Implicits._ で提案されています

Play Framework 2.1 - 暗黙の ExecutionContext が見つかりません

しかし、成功しませんでした。インジェクションまたはコンストラクターの何が問題なのかについて、誰かが私に洞察を与えることができれば幸いです。御時間ありがとうございます。レネクス

4

1 に答える 1

1

play.api.Play.currentクラスを熱心なシングルトンとしてバインドする場合、コードが静的呼び出しを参照しないことに注意する必要があります。Guice バインディングは、Play アプリケーションが開始される前に配線され、熱心なシングルトンとしてバインドするインスタンスも、アプリケーションが開始する前にインスタンス化されます。したがって、このコードで開始済みのアプリケーションを参照すると、「開始済みのアプリケーションがありません」というエラーが表示されます。

あなたのコードの問題は、DAOSlickトレイトがDatabaseConfig参照された static の助けを借りて statically を作成することplay.api.Play.currentです。DatabaseConfigProviderまたはDatabaseConfigインスタンスを DAO 実装に挿入する必要があります。これを行う方法については、 Play Framework のドキュメントを参照してください。

于 2015-10-23T07:20:27.350 に答える