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

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.

このページでは、セットアップと実行時によくある問題をまとめます。

Provider not found

コンテナがトークンまたはクラスを解決できない場合、プロバイダーが不足しています。 composition root でプロバイダーを登録しているか確認してください。
container.register(UserRepositoryToken, {
  useClass: PrismaUserRepository,
  lifetime: "scoped",
});
deps で使っているトークンと登録で使っているトークンが同じかも確認してください。

Scoped dependency resolved from root

スコープ付きの依存関係はルートコンテナではなく、スコープから解決してください。
const scope = container.createScope();

try {
  const usecase = scope.resolve(GetUserUseCase);
} finally {
  await scope.dispose();
}
フレームワークアダプターはリクエストスコープを代わりに作ります。

Singleton depends on scoped dependency

Singleton はリクエスト固有の状態を保持すべきではありません。検証がライフタイム違反を報告した場合は、その依存関係を scoped または transient ライフタイムに移すか、singleton がリクエストローカルなデータに依存しないよう設計を変えてください。

Decorator metadata is not being read

これは期待される挙動です。Wyrly は reflect-metadataemitDecoratorMetadata を使いません。 Dependencies は明示的に宣言してください。
@Injectable({ deps: [UserRepositoryToken] })
class GetUserUseCase {
  constructor(private readonly users: UserRepository) {}
}

Request state leaks between users

ライフタイムを確認してください。認証済みユーザーのコンテキスト、DataLoader インスタンス、トランザクション、リクエストローカルなキャッシュなどのリクエスト固有のオブジェクトは通常 scoped にすべきです。

Graph validation fails in CI

検証の失敗は依存の組み立てエラーとして扱います。エラーメッセージを読み、プロバイダーの登録、依存トークン、ライフタイムの関係を確認してください。
const result = container.validate();