假设我有一个接口IA
,两个实现A1
和A2
以及一个依赖于B
的依赖类IA
。在Windsor容器中,相同接口的两个实现的注册方式如下:
container.Register(Component.For<IA>()
.ImplementedBy<A1>());
container.Register(Component.For<IA>()
.ImplementedBy<A2>());
是否可以指定要在依赖类中使用 B
的实现?
例如在Autofac中,我可以这样使用KeyFilterAttribute
:
class B
{
...
public B([KeyFilter("A1")]IA a)
{
...
}
}
答案 0 :(得分:1)
有几种方法可以实现这一目标,哪种方法最适合取决于更大的环境。
如果您一个接一个地注册组件,例如在问题Windsor uses the first component registered as the default的示例代码中为该服务。因此,在您的B
内部,您一定可以通过A1
实现该服务。
为明确起见,您可以强制将组件设置为默认组件(也可以按照约定进行注册
。
container.Register(
Component.For<IA>().ImplementedBy<A1>(),
Component.For<IA>().ImplementedBy<A2>().IsDefault());
B
to pick either A1
or A2
regardless of the defaults(最接近Autofac 。
container.Register(
Component.For<B>()
.DependsOn(Dependency.OnComponent<IA, A1>))