Skip to content

DIプラグインの設定

必要な依存関係: io.ktor:ktor-server-di

コード例: server-di

アプリケーション設定ファイルで、依存性注入 (DI) プラグインを設定できます。これらの設定は、依存関係の解決動作にグローバルに影響し、登録されているすべての依存関係に適用されます。

依存関係キーのマッピング

ktor.di.keyMapping プロパティは、解決時に依存関係キーをどのように一般化し、マッチさせるかを定義します。これにより、要求された型を解決する際に、登録されているどの依存関係が互換性があるとみなされるかが決まります。

yaml
ktor:
  di:
    keyMapping: Supertypes * Nullables * OutTypeArgumentsSupertypes * RawTypes

上記の例は、DIプラグインで使用されるデフォルトのキーマッピングに一致します。

利用可能なキーマッピングオプション

Default
<code>Default</code> 以下のデフォルトの組み合わせを使用します。
Supertypes
<code>Supertypes</code> そのスーパータイプのいずれかを使用して依存関係を解決できるようにします。
Nullables
<code>Nullables</code> 型のNull許容(nullable)バリアントとNull非許容(non-nullable)バリアントのマッチングを許可します。
OutTypeArgumentsSupertypes
<code>OutTypeArgumentsSupertypes</code>out 型パラメータの共変性(covariance)を許可します。
RawTypes
<code>RawTypes</code> 型引数を考慮せずにジェネリック型を解決できるようにします。
Unnamed
<code>Unnamed</code> マッチング時に依存関係の名前(@Named)を無視します。

キーマッピングオプションの組み合わせ

集合演算子 *(積集合)、+(和集合)、および ()(グループ化)を使用して、キーマッピングオプションを組み合わせることができます。

次の例では、List<String> として登録された依存関係を、Collection<String>Supertypes)、List または List?RawTypes および Nullables)として解決できます。

yaml
ktor:
  di:
    keyMapping: Supertypes + (Nullables * RawTypes)

この組み合わせには含まれていないため、Collection? としては解決されません。

競合解決ポリシー

ktor.di.conflictPolicy プロパティは、同じ依存関係キーに対して複数のプロバイダーが登録された場合のDIコンテナの動作を制御します。

yaml
ktor:
  di:
    conflictPolicy: Default

利用可能なポリシー

Default
<code>Default</code> 競合する依存関係が宣言された場合に例外をスローします。
OverridePrevious
<code>OverridePrevious</code> 以前の依存関係を、新しく提供されたもので上書きします。
IgnoreConflicts
<code>IgnoreConflicts</code> テスト環境では、DIプラグインはデフォルトで IgnoreConflicts を使用します。これにより、テストコードがエラーを発生させることなく本番環境の依存関係をオーバーライドできるようになります。