城堡-温莎 - 根据对另一个组件的调用返回不同的实现
本文关键字:返回 调用 实现 另一个 温莎 城堡 组件 | 更新日期: 2023-09-27 18:33:16
我正在创建一个Web API,我希望能够对其进行版本控制。我想这样做的方式是这样的:
- 客户端应用程序传入自定义 HTTP 标头,每个请求都包含版本他们调用的 API。
- 存在一个组件(称为
IVersionRetriever
或其他东西)来拉取请求中的版本号。温莎城堡负责用于提供IVersionRetriever
实例。 - 我希望服务接口的实现在哪里变化在版本之间,温莎城堡配置为检查
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答案。