我希望你过得愉快!
根据框架的要求,我必须使用inject Configuration
类并获取配置密钥。
问题是现在我必须重构我的代码,但我无法弄清楚我该怎么做。
问题
为了简单起见,我们考虑一个Sender
类及其伴随对象。
class Sender(image: File, name: String) {
def send() = { Sender.s3Client.send(image, name) }
}
object Sender {
val accessKey = config.get[String]("accessKey")
val secretKey = config.get[String]("secretKey")
val s3Client: AmazonS3 = ... withCredentials ( accessKey, secretKey) ...
}
这里我config.get
方法应该是一个注入的对象。
问题
如何在此方案中注入Configuration
类?
我不能像下面那样使用,因为其他一些方法用image和name param
实例化这个类class Sender @Inject() (image: File, name: String, config: Configuration) { ... }
谢谢!
答案 0 :(得分:2)
在Scala中,即使不使用DI Framework,也可以拥有自己的DI容器。
trait ConfigurationModule {
def config: Configuration
}
trait S3Module {
def accessKey: String
def secretKey: String
lazy val s3Client: AmazonS3 = ... withCredentials ( accessKey, secretKey) ...
}
object YourOwnApplicationContext extends ConfigurationModule with S3Module with ... {
...
lazy config: Configuration = ConfigFactory.load()
lazy val accessKey = config.get[String]("accessKey")
lazy val secretKey = config.get[String]("secretKey")
}
现在所有的依赖项都在YourOwnApplicationContext
。
所以你可以这样做:
class Sender(image: File, name: String) {
def send() = YourOwnApplicationContext.s3Client.send(image, name)
}
您可以阅读这些文章: