【问题标题】:Binding to multiple concrete implementations with IOC frameworks?使用 IOC 框架绑定到多个具体实现?
【发布时间】:2008-11-25 00:20:09
【问题描述】:

我对 DI/IOC 容器的概念比较熟悉,我之前曾参与过已经使用它们的项目。但是,对于这个新项目,没有现成的框架,我不得不选择一个。

长话短说,在某些情况下,我们将为给定接口配置多个实现。浏览一下网络,似乎使用任何主流框架来选择性地绑定到其中一个实现都非常简单。

然而,在某些情况下,我们需要运行 ALL 已配置的实现。我已经在这里搜索了所有 IOC 标记的帖子,我正在尝试翻阅主要框架的文档(到目前为止,查看 Unity、Ninject 和 Windsor),但是文档通常很少,我没有时间检查所有软件包的来源。

那么,是否有任何主流 IOC 容器允许我为我的一项服务绑定到所有已配置的具体类型?

【问题讨论】:

    标签: dependency-injection inversion-of-control ioc-container


    【解决方案1】:

    当我第一次尝试解析已注册类型的所有实现时,让我印象深刻的是,当您调用 ResolveAll() 时,未命名(默认)类型注册将不会返回。只返回命名实例。

    所以:

    IUnityContainer container = new UnityContainer();
    container.RegisterType<IMyInterface, MyFirstClass>();
    container.RegisterType<IMyInterface, MySecondClass>("Two");
    container.RegisterType<IMyInterface, MyThirdClass>("Three");
    
    var instances = container.ResolveAll<IMyInterface>();
    
    Assert.AreEqual(2, instances.Count, "MyFirstClass doesn't get constructed");
    

    【讨论】:

      【解决方案2】:

      所以我不知何故错过了我第一次通过 Unity 浏览...但我会回答我自己的问题。

      Unity 正是我想要的。 http://msdn.microsoft.com/en-us/library/cc440943.aspx

      此外,对于像我一样从事 IOC 狩猎和跳舞的其他人来说,这个链接被证明是无价的。 http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2021-12-06
        • 1970-01-01
        相关资源
        最近更新 更多