私は滑らかなSqLiteを使用しているプレースケールのアプリケーションを持っています。私のテーブルは次のように定義されています。アクターでのスリックなデータベースアクセス
@Singleton
class DataSets @Inject()(protected val dbConfigProvider: DatabaseConfigProvider, keys: PublicKeys) extends DataSetsComponent
with HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
val DataSets = TableQuery[DataSetsTable]
def all = db.run(DataSets.sortBy { _.id }.result)
...
}
私のコントローラはDI経由でのアクセスを取得:
@Singleton
class DataSetsController @Inject() (dataSets: DataSets, env: play.Environment) extends Controller {
...
は、どのように私は俳優でデータベース・ハンドルを得るのですか?
class TrainActor @Inject() (dataSets: DataSets) extends Actor {
...
もちろん、GuiceはDataSetsクラスを見つけられないため動作しません。
編集:明らかにするには:私はコントローラのデータベースアクセス(askを介して)を使用するのではなく、要求後にコントローラからリソースを消費する計算を開始し、後でdbに格納します(async )。
class MyController @Inject()(@Named("injected-train-actor") trainActor: ActorRef) {
def endpointTest = Action.async {
for {
items <- (trainActor ? FetchAll).mapTo[Seq[DataSetsTableRow]]
} yield Ok(Json.toJson(items))
}
}
コントローラにメッセージを送信する代わりに、新しいアクタをインスタンス化できるようにしたい場合はどうすればよいですか? – joni