castle-windsor – 温莎城堡:使用会议注册和特定实施

假设由FirstBar和SecondBar实现的Foo和IBar实现了IFoo.

使用此约定注册:

container.Register(
    AllTypes.FromThisAssembly().Pick()
        .WithService.DefaultInterface())

我们在容器中有三个条目:

IFoo = Foo
IBar = FirstBar
IBar = SecondBar

现在,我们如何调整此注册以告知容器对于IBar我们只想注册SecondBar?有点:

container.Register(
    AllTypes.FromThisAssembly().Pick()
        .WithService.DefaultInterface()
        .For<IBar>().Select<SecondBar>())

使用案例:我们的应用程序中有很多服务都是按惯例注册的.然而,一些服务接口具有两个或更多个实现(例如,实际实现,虚假实现和测试实现).公约注册将在同一界面下注册它们,在解析界面时,我们将获得第一个实现(以非确定性顺序).我们希望能够在注册时为这些服务选择一个特定的实现.我们怎么做?

最佳答案
收紧你的习俗.这显然是广泛的.

container.Register(
    AllTypes.FromThisAssembly()
        .Where(t => t.Namespace != "Acme.Tests")
        .WithService.DefaultInterface())

转载注明原文:castle-windsor – 温莎城堡:使用会议注册和特定实施 - 代码日志