> ## 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.

# Common issues

> Wyrly DI のセットアップと実行時によくある問題を解決します。

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

## Provider not found

コンテナがトークンまたはクラスを解決できない場合、プロバイダーが不足しています。

composition root でプロバイダーを登録しているか確認してください。

```ts theme={null}
container.register(UserRepositoryToken, {
  useClass: PrismaUserRepository,
  lifetime: "scoped",
});
```

`deps` で使っているトークンと登録で使っているトークンが同じかも確認してください。

## Scoped dependency resolved from root

スコープ付きの依存関係はルートコンテナではなく、スコープから解決してください。

```ts theme={null}
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-metadata` や `emitDecoratorMetadata` を使いません。

Dependencies は明示的に宣言してください。

```ts theme={null}
@Injectable({ deps: [UserRepositoryToken] })
class GetUserUseCase {
  constructor(private readonly users: UserRepository) {}
}
```

## Request state leaks between users

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

## Graph validation fails in CI

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

```ts theme={null}
const result = container.validate();
```
