温莎城堡:使用约定注册以及具体实现

2023-11-26

假设我们有由 Foo 实现的 IFoo,以及由 FirstBar 和 SecondBar 实现的 IBar。

使用此约定注册:

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())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

温莎城堡:使用约定注册以及具体实现 的相关文章

随机推荐