ユーザー オブジェクトに依存関係を挿入したいが、現在のユーザーを IoC コンテナーに配置したい状況があります。次の行を機能させたい:
kernel.Get<User>(); // Should return a new User()
kernel.Get<User>("Current"); // Should return the current user
次のようなバインディングが機能すると考えるかもしれません。
Bind<User>().ToSelf();
Bind<User>().ToMethod(LoadCurrentUser).InRequestScope().Named("Current");
もちろん、次のようになります。
Ninject.ActivationException: ユーザーのアクティブ化中にエラーが発生しました 複数の一致するバインディングが利用可能です。 アクティベーション パス: 1) 利用者へのお願い 提案: 1) User のバインドを 1 回だけ定義したことを確認します。
名前付きバインディングはそのバインディングの適用を制限しないため、エラーを理解しています。したがって、両方のバインディングが適用されます。.When*() メソッドでコンテキスト バインドを使用する必要があることは明らかですが、それを行う方法が思いつきません。名前付きインスタンスが適用されているかどうかを検出するメソッドがあるべきだと思います。何かのようなもの:
// Not valid Ninject syntax
Bind<User>().ToSelf().WhenUnnamedRequested();
Bind<User>().ToMethod(LoadCurrentUser).WhenNamedRequested().InRequestScope().Named("Current");
インターフェイス上に場所が見つからないかIRequest
、要求された名前を教えてくれるプロパティです。どうすればいいですか?