0

Web API を作成しており、それをバージョン管理できるようにしたいと考えています。私がやりたい方法はこれです:

  1. クライアント アプリケーションは、呼び出し対象の API のバージョンを含む各要求と共に、カスタム HTTP ヘッダーを渡します。
  2. IVersionRetrieverリクエストからバージョン番号を取得するためのコンポーネント(または何かと呼ばれる)が存在します。Castle Windsor は、 のインスタンスを提供する責任がありますIVersionRetriever
  3. サービス インターフェイスの実装をバージョン間で変更したい場合、Castle Windsor は IVersionRetriever.ApiVersion、取得した値に応じて実装をチェックして返すように構成されています。

これはすべて簡単に思えますが、Windsor の登録 API からは、Windsor に「そうですね、が 1 のIFoo場合はが必要ですが、バージョンが 2 の場合は が必要ですIVersionRetriever.ApiVersionSuperFooSuperDuperFoo

これをどのように構成しますか?

関連する場合、すべてのコンポーネントには PerWebRequest ライフスタイルがあります。

4

2 に答える 2

2

TypedFactory を使用して、ApiVersion に従って目的の IFoo を解決するのはどうですか? その場合、依存関係は IFoo ではなく、代わりに IFooFactory になります。

于 2012-05-04T13:48:30.230 に答える
1

将来的にそれを行う方法を知っているように:

container.Register(Component.For<IUnitOfWork>().UsingFactoryMethod(() => IVersionRetriever.ApiVersion == 1 ? new SuperFoo() : new SuperDuperFoo() ).LifeStyle.PerWebRequest);

しかし、@Cristianoの回答に同意します。

于 2012-05-04T13:52:14.600 に答える