Gle*_*eeb 6 scala guice playframework playframework-2.0
我正在使用Play with Scala,我正在尝试创建一个单例,我想从它的特性而不是直接注入它.
例如:
@ImplementedBy(classOf[S3RepositoryImpl])
trait S3Repository {
}
@Singleton
class S3RepositoryImpl extends S3Repository {
}
Run Code Online (Sandbox Code Playgroud)
但这失败了,错误:
特质是单身是抽象的; 无法实例化
我尝试了几种组合,它们都产生了相同的效果.
我来自春天的背景,它很自然吗?我错过了Guice如何处理这种类型的注射剂吗?
谢谢.
Chr*_*ach 31
正如@ Tavian-Barnes所指出的,解决方案是确保您拥有以下导入:
import javax.inject.Singleton
Run Code Online (Sandbox Code Playgroud)
我这里有一个"完整的"工作实例,只是希望我没有陈述明显的......
package controllers
import play.api._
import play.api.mvc._
import com.google.inject._
class Application @Inject() (s3: S3Repository) extends Controller {
def index = Action {
println(s3.get)
Ok
}
}
@ImplementedBy(classOf[S3RepositoryImpl])
trait S3Repository {
def get: String
}
@Singleton
class S3RepositoryImpl extends S3Repository {
def get: String = "bla"
}
Run Code Online (Sandbox Code Playgroud)
每当你使用@InjectGuice 标记一个类的构造函数时,它将管理实例本身的注入.所以,如果你把你的课程标记为@Singleton,Guice会创建并且总是只给你一个实例.没有人可以阻止您在代码中手动实例化类...您可以在Play中详细探索它.
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |