0

我正在创建一个 Web API,我希望能够对其进行版本控制。我想做的方式是这样的:

  1. 客户端应用程序在自定义 HTTP 标头中传递包含它们正在调用的 API 版本的每个请求。
  2. 存在一个组件(称为IVersionRetriever或其他)以从请求中提取版本号。Castle Windsor 负责提供IVersionRetriever.
  3. 在我希望服务接口的实现在版本之间有所不同的地方,Castle Windsor 被配置为 IVersionRetriever.ApiVersion根据获得的值检查并返回一个实现。

所有这一切似乎都很简单,但我无法从 Windsor 的注册 API 中计算出我会如何对 Windsor 说“对IFoo,如果IVersionRetriever.ApiVersion是 1,那么我想要一个SuperFoo,但如果版本是 2,那么我想要一个SuperDuperFoo.

我将如何配置它?

如果相关,所有组件都有 PerWebRequest 生活方式。

4

2 回答 2

2

根据 ApiVersion 使用 TypedFactory 来解析所需的 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 回答