0

我有 Scala 特质

trait UserRepository {
  def findByEmail(email: String): User
}

我想用 MacWire 将它注入到服务中

class AccountService(){
  val userRepo = wire[UserRepository]
}

然后在测试或课程中使用它

class AccountServiceSpec {
  val userRepo = new UserRepositoryImpl()
  val accountSvc = new AccountService() //<--not manually injecting repo in service constructor
}

但我在服务类中遇到编译错误

找不到 accounts.repository.UserRepository 的公共构造函数或伴随对象

4

1 回答 1

1

您可以尝试转换userRepo为类参数,以允许 macwire 自动为服务提供其值:

import com.softwaremill.macwire._

case class User(email: String)

trait UserRepository {
  def findByEmail(email: String): User
}

class AccountService(val userRepo: UserRepository)

class UserRepositoryImpl extends UserRepository{
  def findByEmail(email: String): User = new User(email)
}

class AccountServiceSpec {
  val userRepo = new UserRepositoryImpl()
  val accountSvc = wire[AccountService] //<--not manually injecting repo in service constructor
}
于 2016-02-27T15:22:56.860 回答