Dependency injection Windsor Ioc容器:如何注册某些构造函数采用不同的接口实现

Dependency injection Windsor Ioc容器:如何注册某些构造函数采用不同的接口实现,dependency-injection,inversion-of-control,castle-windsor,ioc-container,Dependency Injection,Inversion Of Control,Castle Windsor,Ioc Container,我有很多类将IMyService作为构造函数参数 e、 g 我如何进行注册,以便ClassB获得Concrete2,ClassA获得Concrete1 另外,有没有一种方法可以使一个实例成为默认值,并且只指定偏离默认值的实例?(因为大多数人会选择混凝土1,只有少数人会选择混凝土2。) 我使用的是fluent接口,而不是XML配置。使用服务覆盖: var container = new WindsorContainer(); container.Register( Component.Fo

我有很多类将IMyService作为构造函数参数

e、 g

我如何进行注册,以便ClassB获得Concrete2,ClassA获得Concrete1

另外,有没有一种方法可以使一个实例成为默认值,并且只指定偏离默认值的实例?(因为大多数人会选择混凝土1,只有少数人会选择混凝土2。)

我使用的是fluent接口,而不是XML配置。

使用服务覆盖:

var container = new WindsorContainer();
container.Register(
    Component.For<IMyService>().ImplementedBy<Concrete1>().Named("C1"),
    Component.For<IMyService>().ImplementedBy<Concrete2>().Named("C2"),
    Component.For<ClassA>().ServiceOverrides(ServiceOverride.ForKey("service").Eq("C1")),
    Component.For<ClassB>().ServiceOverrides(ServiceOverride.ForKey("service").Eq("C2"))
);
var容器=新的WindsorContainer();
集装箱。登记(
Component.For().ImplementedBy().Named(“C1”),
Component.For().ImplementedBy().Named(“C2”),
组件.For().ServiceOverrides(ServiceOverride.ForKey(“服务”).Eq(“C1”),
组件.For().ServiceOverrides(ServiceOverride.ForKey(“服务”).Eq(“C2”))
);

是否有一种方法可以设置默认值并覆盖异常。与其他人一样,我需要为Concrete 1进行大约100次特定注册,为Concrete 2进行大约3次特定注册-谢谢当组件需要“IMyService”时,我认为Windsor将始终返回第一次注册的组件。因此,您可以跳过ClassA(以及其他100种情况)的ServiceOverride,只在3种边缘情况下使用它。在这种情况下,C1和C2是什么?它们是否为注册提供了任意名称,以便您可以在serviceOverrides中引用它们?或者它们与我的项目中的实际类相对应?再次感谢前者:只是使用任意名称来标识服务覆盖中的不同实现。
var container = new WindsorContainer();
container.Register(
    Component.For<IMyService>().ImplementedBy<Concrete1>().Named("C1"),
    Component.For<IMyService>().ImplementedBy<Concrete2>().Named("C2"),
    Component.For<ClassA>().ServiceOverrides(ServiceOverride.ForKey("service").Eq("C1")),
    Component.For<ClassB>().ServiceOverrides(ServiceOverride.ForKey("service").Eq("C2"))
);