将参数传递给Scala对象

spa*_*rkr 9 scala

是否有可能从外部对象初始化Scala对象?我正在尝试初始化的Scala对象没有任何Companion类.这是一个例子:

object ObjectA {
  val mongoDBConnectionURI = // This is the Val that I want to initialize from an external object
  ....
  ....
}
Run Code Online (Sandbox Code Playgroud)

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

dk1*_*k14 5

简单方案:

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

如果在"传递"名称和密码后使用mongoDBConnectionURI - 一切都应该正常工作.但我建议使用class而不是object并将其传递给DAO classess(也没有循环引用):

==moduleA==

class UserDAO(objectA: ObjectA) 

==moduleB==

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

}
Run Code Online (Sandbox Code Playgroud)