scala / typesafe Config是否提供了一些如何配置特性的可插入实现的方法?

时间:2015-01-13 20:02:13

标签: scala typesafe-config

我面临的任务是提供特征作为配置选项的实现。 我有以下类层次结构:

trait Storage {
  def store()
}

object LocalStorage extends Storage {
   def store(){ ... }
}

object RemoteStorage extends Storage {
   def store(){ ... }
}

在属性文件中进行配置:

storage.class = "com.xxx.LocalStorage"

在持久层上实现:

class CheckPersister{
val storageType = ConfigFactory.load().getString("storage.class")
val storage: Storage = Class.forName(storageType).asInstanceOf[Storage]
...
}

有没有更好的方法来处理这种配置?我正在使用Typesafe配置。

THX

1 个答案:

答案 0 :(得分:3)

直接在配置文件中指定类的名称看起来不错。这样的事情会被接受吗?

storage.location = "local"

class CheckPersister {
  val storageType = ConfigFactory.load().getString("storage.class")
  val storage: Storage = storageType match {
    case "local" => LocalStorage
    case "remote" => RemoteStorage
    case x => throw new RuntimeException(s"Invalid storage type $x specified")
  }
  ...
}

通过这种方式,您无法意外地实例化您不想要的课程。