【问题标题】:Pass Parameters to Scala Object将参数传递给 Scala 对象
【发布时间】:2014-03-17 14:40:48
【问题描述】:

是否可以从外部对象初始化 Scala 对象?我试图初始化的 Scala 对象没有任何 Companion 类。举个例子:

object ObjectA {
  val mongoDBConnectionURI = // This is the Val that I want to initialize from an external object
  ....
  ....
}

但是 MongoDBConnectionURI 类型的 mongoDBConnectionURI 需要一个主机和一个端口,我必须从实际上由对象 B 完成的配置文件中读取这些值,并将这些值传递给 ObjA。稍后我的所有 DAO 对象将访问对象 A 中的 mongoDBConnectionURI 变量以获取连接字符串。如何将对象 B 中的值传递给对象 A 并初始化对象 A 中的值?

【问题讨论】:

  • 为什么不只是... val mongodb = ObjectB.url ...
  • 那行不通。读取 db 凭证值的初始化逻辑驻留在另一个项目中,而这个另一个项目是一个播放应用程序,在启动时读取配置详细信息并将它们发送到 ObjectA,后者作为依赖项添加到播放项目中。访问数据库的 DAO 类驻留在此依赖项中,它们不应该有任何返回 ObjectB 的引用。
  • 我相信您正在寻找工厂模式。 en.wikipedia.org/wiki/Factory_method_pattern

标签: scala


【解决方案1】:

简单的解决方案:

object ObjectA {
  lazy val mongoDBConnectionURI = getConnection(name.get, passwd.get)
  var name: Option[String] = None
  var passwd: Option[String] = None
}

如果您在“传递”名称和密码后使用 mongoDBConnectionURI - 一切都应该正常。但我建议使用类而不是对象并将其传递给 DAO 类(也没有循环引用):

==moduleA==

class UserDAO(objectA: ObjectA) 

==moduleB==

object ObjectB {
  val user = ...
  val passwd = ...
  val a = new ObjectA(name, passwd)
  object UserDAOInstance extends UserDAO(a)

}

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多