找不到参数写入错误的隐式值,但我使用宏定义了处理程序

Could not find implicit value for parameter write eror, yet I defined the handler using the macro

我有以下内容:

Account.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,正如导入 reactivemongo.api.bson 所见,而集合正在使用旧的驱动程序,正如它所看到的那样使用 reactivemongo.api.collections.bson 而不是 reactivemongo.api.bson.collection.

建议看一下documentation,不要混用相关库的不兼容版本。