在构造函数参数中指定依赖实现
Specify dependency implementation in constructor parameter
假设我有一个接口 IA
、两个实现 A1
和 A2
以及一个依赖于 IA
的依赖 class B
. Windsor容器中同一个接口的两个实现是这样注册的:
container.Register(Component.For<IA>()
.ImplementedBy<A1>());
container.Register(Component.For<IA>()
.ImplementedBy<A2>());
有没有办法在依赖 class B
中指定使用哪个实现 ?
例如在 Autofac 中,我可以这样使用 KeyFilterAttribute
:
class B
{
...
public B([KeyFilter("A1")]IA a)
{
...
}
}
有几种方法可以实现这一点,哪一种最合适取决于更大的上下文。
如果您一一注册组件,就像服务的问题示例代码 Windsor uses the first component registered as the default 中那样。因此,在您的 B
中,您可以保证获得 A1
.
实现的服务
明确地说,你可以强制一个组件成为默认组件(也适用于按惯例注册
.
container.Register(
Component.For<IA>().ImplementedBy<A1>(),
Component.For<IA>().ImplementedBy<A2>().IsDefault());
- 或者,从消费端的角度来看you can configure
B
to pick either A1
or A2
regardless of the defaults(最接近Autofac
.
container.Register(
Component.For<B>()
.DependsOn(Dependency.OnComponent<IA, A1>))
假设我有一个接口 IA
、两个实现 A1
和 A2
以及一个依赖于 IA
的依赖 class B
. Windsor容器中同一个接口的两个实现是这样注册的:
container.Register(Component.For<IA>()
.ImplementedBy<A1>());
container.Register(Component.For<IA>()
.ImplementedBy<A2>());
有没有办法在依赖 class B
中指定使用哪个实现 ?
例如在 Autofac 中,我可以这样使用 KeyFilterAttribute
:
class B
{
...
public B([KeyFilter("A1")]IA a)
{
...
}
}
有几种方法可以实现这一点,哪一种最合适取决于更大的上下文。
如果您一一注册组件,就像服务的问题示例代码 Windsor uses the first component registered as the default 中那样。因此,在您的
B
中,您可以保证获得A1
. 实现的服务
明确地说,你可以强制一个组件成为默认组件(也适用于按惯例注册
.
container.Register(
Component.For<IA>().ImplementedBy<A1>(),
Component.For<IA>().ImplementedBy<A2>().IsDefault());
- 或者,从消费端的角度来看you can configure
B
to pick eitherA1
orA2
regardless of the defaults(最接近Autofac
.
container.Register(
Component.For<B>()
.DependsOn(Dependency.OnComponent<IA, A1>))