あなたが探しているものをちょっと解決するいくつかのアプローチを見てきました。チェックアウト
インポートの定義
https://github.com/mongodb/casbah/blob/master/casbah-core/src/main/scala/Implicits.scala
このアプローチの小さな例:
object Imports extends Imports with commons.Imports with query.Imports with query.dsl.FluidQueryBarewordOps
object BaseImports extends BaseImports with commons.BaseImports with query.BaseImports
object TypeImports extends TypeImports with commons.TypeImports with query.TypeImports
trait Imports extends BaseImports with TypeImports with Implicits
@SuppressWarnings(Array("deprecation"))
trait BaseImports {
// ...
val WriteConcern = com.mongodb.casbah.WriteConcern
// More here ...
}
trait TypeImports {
// ...
type WriteConcern = com.mongodb.WriteConcern
// ...
}
使用される輸入品
https://github.com/mongodb/casbah/blob/master/casbah-core/src/main/scala/MongoClient.scala
彼らがこのインポート オブジェクトを使用すると、すべてのタイプ エイリアスのロックが解除されます。例えば、WriteConcern
import com.mongodb.casbah.Imports._
// ...
def setWriteConcern(concern: WriteConcern): Unit = underlying.setWriteConcern(concern)
基本的に、すべてのインポートを共通の Import オブジェクトにラップしてから、 import com.mycompany.Imports._ を使用します。
Doobie は、ほとんどのエンドユーザーがちょうどimport doobie.imports._
https://github.com/tpolecat/doobie/blob/series/0.3.x/yax/core/src/main/scala/doobie/imports.scala
繰り返しますが、このパターンのサンプル:
object imports extends ToDoobieCatchSqlOps with ToDoobieCatchableOps {
/**
* Alias for `doobie.free.connection`.
* @group Free Module Aliases
*/
val FC = doobie.free.connection
/**
* Alias for `doobie.free.statement`.
* @group Free Module Aliases
*/
val FS = doobie.free.statement
// More here ...
}
パッケージ オブジェクト スタイルとのこのアプローチの主な違いは、何をいつインポートするかをより詳細に制御できることです。私は両方のパターンを使用しました。通常は、内部パッケージ全体で必要になる共通のユーティリティ メソッドのパッケージ オブジェクトです。また、ライブラリ、特に私のコードのユーザーについては、doobie
前述のように、単一のインポートを使用してユーザーの DSL 構文のロックを解除する特定の暗黙的な定義をインポート オブジェクトにアタッチできます。