找不到参数写入错误的隐式值,但我使用宏定义了处理程序
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,不要混用相关库的不兼容版本。
我有以下内容:
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,不要混用相关库的不兼容版本。