如何使用 macwire 注入特征
How to inject a trait with macwire
我有 Scala 特质
trait UserRepository {
def findByEmail(email: String): User
}
我想用 MacWire 将其注入服务
class AccountService(){
val userRepo = wire[UserRepository]
}
然后在测试中使用它或class
class AccountServiceSpec {
val userRepo = new UserRepositoryImpl()
val accountSvc = new AccountService() //<--not manually injecting repo in service constructor
}
但我在服务中遇到编译错误 class
Cannot find a public constructor nor a companion object for
accounts.repository.UserRepository
您可以尝试将 userRepo
转换为 class 参数,使 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
}
我有 Scala 特质
trait UserRepository {
def findByEmail(email: String): User
}
我想用 MacWire 将其注入服务
class AccountService(){
val userRepo = wire[UserRepository]
}
然后在测试中使用它或class
class AccountServiceSpec {
val userRepo = new UserRepositoryImpl()
val accountSvc = new AccountService() //<--not manually injecting repo in service constructor
}
但我在服务中遇到编译错误 class
Cannot find a public constructor nor a companion object for accounts.repository.UserRepository
您可以尝试将 userRepo
转换为 class 参数,使 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
}