メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.wyrly.dev/llms.txt

Use this file to discover all available pages before exploring further.

Wyrly の core model は小さく保たれています。ほとんどの application で必要なのは、tokens、 providers、containers、scopes、lifetimes の 5 つです。

Tokens

トークンは TypeScript の型を持つ実行時のキーです。
const UserRepositoryToken = token<UserRepository>("UserRepository");
インターフェースや抽象的な機能にはトークンを使います。クラス自体が依存のキーになる場合は、クラスのコンストラクタを直接登録することもできます。

Providers

プロバイダーは、依存関係をどのように作成または返すかをコンテナに伝えます。 Wyrly は以下に対応しています。
  • クラスで実装された依存関係向けの useClass
  • 定数やテストダブル向けの useValue
  • カスタム生成が必要な依存関係向けの useFactory
  • エイリアス向けの useExisting

Containers

ルートコンテナはアプリケーション全体の登録を管理します。
const container = createContainer();
container.register(UserRepositoryToken, {
  useClass: PrismaUserRepository,
  lifetime: "scoped",
});
ルートコンテナは composition root として扱います。ドメインや use case のコードの中ではなく、そこに具体的なインフラ実装を登録してください。

Scopes

スコープは子の依存解決コンテキストです。Web アプリでは、アダプターが通常 1 リクエストにつき 1 スコープを作ります。
const scope = container.createScope();
try {
  const service = scope.resolve(MyService);
} finally {
  await scope.dispose();
}
スコープ付きの依存関係は同じスコープ内で再利用され、スコープが破棄されると一緒に破棄されます。

Lifetimes

LifetimeMeaning
singletonroot container につき 1 instance
scopedscope につき 1 instance
transientresolution ごとに新しい instance
依存関係の状態とリソースの所有権に合う、最も狭いライフタイムを選んでください。

Validation

本番環境に出す前に依存グラフの問題を検出するには、container.validate() を使います。
  • プロバイダーの不足
  • 循環依存
  • 不正なプロバイダー定義
  • ライフタイム違反
検証は依存の組み立てを検査可能な成果物にできるため、CI で特に有用です。