我使用带有以下方法签名的DAO库(ActiveSlick):
def save(entity: Entity)(implicit exc: ExecutionContext): DBIO[Entity]
等。大多数人都有一个隐含的exc
参数。
我正在扩展该类,并希望将ExecutionContext附加到预定义的内容,例如:implicit val context = Contexts.dbContext
。
另外,我已将纯方法包装在:
中 def run[S] (action: DBIO[S]): Future[Try[S]] = db.run(action.asTry)
然而隐含的上下文并没有被客户端代码接收。
我能做的就是:
def run[S] (action: ExecutionContext => DBIO[S]): Future[Try[S]] = db.run(action(context).asTry)
然而这很难看,因为我必须明确地在客户端代码中进行讨论:
dao.run (dao.insert(entity)(_))
我的问题是我是否可以在我的类中添加隐式ExecutionContext
参数,以便调用始终是干净的(呃):
dao.run (dao.insert (entity))
我听说Reader
monad可以做类似的事情......但是对它进行调整证明相当困难。
谢谢!
答案 0 :(得分:0)
定义如下所示的特征,并在需要的地方混合:
trait ExeContext {
implicit def exe: ExecutionContext
//Methods that use the implicit exe
}