Mini 容器学习笔记12——组合实例

  在项目中常常会遇到多个组件都实现了同一个契约接口,那么在DI容器中怎么获取实现同一个契约接口的所有组件呢。 答案是:

IEnumerable<TContract> componets = ServiceLocator.GetAll<TContract>();

     上面的实现方案是目前主流的DI容器的解决方法。但是这种方法是通过服务定位器把资源拉过来的,而不是通过注入的方式推过来的,不符合DI注入传统设计规范。

 那么怎么能够更优雅的解决此类问题呢,MEF率先提供了一种方案ImportMany的方式来进行注入多个组件,当然MIni容器也不甘落后也很快就赶上了。下面看看Mini容器的例子。

    1. 定义契约接口

   [Contract]
    public interface ISimpleContract
    {
    }
    

  2. 实现该契约接口的多个组件

   public class SimpleComponent : ISimpleContract
    {
        
    }
   public class SimpleComponentTwo:ISimpleContract
    {
    }

   3. 创建宿主程序并测试

   [TestFixture]
    public class ManyComponentTest:TestBase
    {
       [InjectMany]
        ISimpleContract[] array;

        [Test]
        public void Test()
        {
            ServiceRegistry
                .Register<SimpleComponent>()
                .Register<SimpleComponentTwo>()
                .Compose(this);

            Assert.IsNotNull(array);
            Assert.IsTrue(array.Count() == 2);

        }
    }

Mini 容器官方网站:

       http://nlite.codeplex.com/

推荐资源:

Mini容器介绍

Mini容器学习目录

Mini容器学习目录1——环境搭建(基础篇)

Mini 容器学习笔记2——组件元数据(基础篇)

Mini 容器学习笔记3——组件的注册(基础篇)

Mini 容器学习笔记4——组件的生命周期(应用篇)

Mini 容器学习笔记5——组件的获取

Mini 容器学习笔记6——组件的获取(应用)

Mini 容器学习笔记7——构造函数注入

Mini 容器学习笔记8——字段注入

Mini 容器学习笔记9——属性注入

Mini 容器学习笔记10——方法注入

Mini 容器学习笔记11——Lazy注入

Mini 容器学习笔记12——组合实例

Mini 容器学习笔记13——插件注入

Mini 容器学习笔记14——异常处理

Mini 容器学习笔记15——监听器-初始化监听器

Mini 容器学习笔记16——监听器-释放监听器

Mini 容器学习笔记17——监听器-启动/停止监听器

Mini 容器学习笔记18——监听器-AOP监听器

posted @ 2011-04-07 12:46 风云 阅读(...) 评论(...) 编辑 收藏