C# castle windsor-根据对另一个组件的调用返回不同的实现
我正在创建一个web API,我希望能够对其进行版本设置。我想这样做:C# castle windsor-根据对另一个组件的调用返回不同的实现,c#,dependency-injection,castle-windsor,C#,Dependency Injection,Castle Windsor,我正在创建一个web API,我希望能够对其进行版本设置。我想这样做: 客户端应用程序传入自定义HTTP头,每个请求都包含版本 他们所反对的API 存在一个组件(称为IVersionRetriever或其他东西)来拉动 请求中的版本号。温莎城堡负责 用于提供IVersionRetriever的实例 我希望服务接口的实现有所不同 在版本之间,Castle Windsor配置为检查 IVersionRetriever.ApiVersion并返回一个实现 根据得到的数值 所有这些看起来都很简单,但我无
IVersionRetriever
或其他东西)来拉动
请求中的版本号。温莎城堡负责
用于提供IVersionRetriever
的实例IVersionRetriever.ApiVersion
并返回一个实现
根据得到的数值IFoo
,如果IVersionRetriever.ApiVersion
是1,那么我想要一个SuperFoo
,但是如果版本是2,那么我想要一个SuperDuperFoo
我将如何配置它
如果相关的话,所有组件都有一个PerWebRequest的生活方式。根据ApiVersion使用TypedFactory来解析所需的IFoo怎么样?在这种情况下,依赖关系将不在IFoo上,而是在IFooFactory上使用TypedFactory根据ApiVersion解析所需的IFoo怎么样?在这种情况下,依赖关系将不在IFoo上,而是在IFooFactory上,只是为了让您知道将来如何做:
container.Register(Component.For<IUnitOfWork>().UsingFactoryMethod(() => IVersionRetriever.ApiVersion == 1 ? new SuperFoo() : new SuperDuperFoo() ).LifeStyle.PerWebRequest);
container.Register(Component.For().UsingFactoryMethod(()=>IVersionRetriever.ApiVersion==1?new SuperFoo():new SuperDuperFoo()).lifety.PerWebRequest);
但我同意@Cristiano answer.只是为了让你知道今后如何做:
container.Register(Component.For<IUnitOfWork>().UsingFactoryMethod(() => IVersionRetriever.ApiVersion == 1 ? new SuperFoo() : new SuperDuperFoo() ).LifeStyle.PerWebRequest);
container.Register(Component.For().UsingFactoryMethod(()=>IVersionRetriever.ApiVersion==1?new SuperFoo():new SuperDuperFoo()).lifety.PerWebRequest);
但是我同意@Cristiano answer。在调用之前,我不需要从容器中获取
IVersionRetriever
实例吗?将其更改为()=>container.Resolve().ApiVersion==1在调用之前,我不需要从容器中获取IVersionRetriever
实例吗?将其更改为()=>container.Resolve().ApiVersion==1