城堡-温莎 - 根据对另一个组件的调用返回不同的实现

本文关键字:返回 调用 实现 另一个 温莎 城堡 组件 | 更新日期: 2023-09-27 18:33:16

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

  1. 客户端应用程序传入自定义 HTTP 标头,每个请求都包含版本他们调用的 API。
  2. 存在一个组件(称为IVersionRetriever或其他东西)来拉取请求中的版本号。温莎城堡负责用于提供IVersionRetriever实例。
  3. 我希望服务接口的实现在哪里变化在版本之间,温莎城堡配置为检查 IVersionRetriever.ApiVersion并返回实现根据获得的值。

这一切看起来很简单,但我无法从温莎的注册 API 中弄清楚我会如何对温莎说'对,对于IFoo,如果 IVersionRetriever.ApiVersion 是 1,那么我想要一个SuperFoo,但如果版本是 2,那么我想要一个SuperDuperFoo

我将如何配置它?

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

城堡-温莎 - 根据对另一个组件的调用返回不同的实现

使用TypedFactory根据ApiVersion解析所需的IFoo怎么样?在这种情况下,依赖关系不会依赖于 IFoo,而是依赖于 IFooFactory

只是为了让您知道将来该怎么做:

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

但我同意@Cristiano答案。