我有以下内容:
帐户.scala
package modules.accounts
import java.time.Instant
import reactivemongo.api.bson._
case class Account(id: String, name: String)
object Account {
type ID = String
implicit val accountHandler: BSONDocumentHandler[Account] = Macros.handler[Account]
// implicit def accountWriter: BSONDocumentWriter[Account] = Macros.writer[Account]
// implicit def accountReader: BSONDocumentReader[Account] = Macros.reader[Account]
}
AccountRepo.scala
package modules.accounts
import java.time.Instant
import reactivemongo.api.collections.bson.BSONCollection
import scala.concurrent.ExecutionContext
final class AccountRepo(
val coll: BSONCollection
)(implicit ec: ExecutionContext) {
import Account.{ accountHandler, ID }
def insertTest() = {
val doc = Account(s"account123", "accountName") //, Instant.now)
coll.insert.one(doc)
}
}
我收到的错误是:
could not find implicit value for parameter writer: AccountRepo.this.coll.pack.Writer[modules.accounts.Account]
[error] coll.insert.one(doc)
据我了解,由宏生成的隐式处理程序应该足够并创建 Writer。我做错了什么?
引用:http://reactivemongo.org/releases/1.0/documentation/bson/typeclasses.html
最佳答案
代码混合了不同的版本。
宏生成的处理程序使用新的 BSON API,可以通过 import reactivemongo.api.bson
看出,而集合使用旧的驱动程序,可以看出它使用 reactivemongo.api.collections.bson
而不是 reactivemongo.api.bson.collection
。
建议查看documentation ,并且不要混合相关库的不兼容版本。
关于scala - 无法找到参数写入错误的隐式值,但我使用宏定义了处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68238973/