Ejemplo n.º 1
0
        /// <summary>
        /// 简单的依赖注入
        /// </summary>
        private void CommonInjectTest()
        {
            Log.L("****************************************");
            Log.L("--------------常规依赖注入--------------");
            Log.L("****************************************");
            //第一种注入实例的方法
            container.SubscribeInstance <ICommonInjectObject>(new CommonObject());
            //第一种从容器获取实例的方法
            _commonObject = container.GetValue <ICommonInjectObject>();

            Log.L("调用第一个注入实例的ToDo方法:");
            _commonObject.ToDo();

            Log.L("");

            //第二种注入实例的方法
            //如果对同一个目标类注入,将会被覆盖
            container.SubscribeInstance(typeof(ICommonInjectObject),
                                        new CommonObject("这是使用带参构造函数构造的实例"));
            //第二种获取实例的方法
            _commonObject = container.GetValue(typeof(ICommonInjectObject)) as ICommonInjectObject;

            Log.L("调用第二个注入实例的ToDo方法:");
            _commonObject.ToDo();

            //使用容器的Clear方法清除当前所有注入的实例
            container.Clear();
            Log.L("");
            Log.L("容器已清空");
            Log.L("");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 同类型多个实例的注入
        /// </summary>
        private void MultiInjectTest()
        {
            //一个类型可以注入多个实例,通过name这个属性来区分
            Log.L("****************************************");
            Log.L("----------同类型多个实例的注入----------");
            Log.L("****************************************");
            container.SubscribeInstance <ICommonInjectObject>(new CommonObject("这是第一个实例"), "Instance1");

            container.SubscribeInstance(typeof(ICommonInjectObject),
                                        new CommonObject("这是第二个实例"),
                                        "Instance2");

            //从容器中获取实例需要指定name
            _commonObject = container.GetValue <ICommonInjectObject>("Instance1");
            Log.L($"取出名为Instance1的实例,类型为{_commonObject.GetType()},调用ToDo方法:");
            _commonObject.ToDo();
            Log.L("");
            _commonObject = container.GetValue(typeof(ICommonInjectObject), "Instance2") as ICommonInjectObject;
            Log.L($"取出名为Instance2的实例,类型为{_commonObject.GetType()},调用ToDo方法:");
            _commonObject.ToDo();

            Log.L("");
            Log.L("使用容器中的GetValues方法获取ICommonInjectObject所有注入的实例,并调用ToDo方法:");
            IEnumerable <ICommonInjectObject> allInstance = container.GetValues <ICommonInjectObject>();

            //遍历调用取到的所有实例的方法
            foreach (ICommonInjectObject instance in allInstance)
            {
                instance.ToDo();
            }
            Log.L("");

            Log.L("使用另一种重载的方法获取所有实例,并调用ToDo方法:");
            IEnumerable <object> objectInstance = container.GetValues(typeof(ICommonInjectObject));

            foreach (ICommonInjectObject instance in objectInstance)
            {
                instance.ToDo();
            }

            //使用容器的Clear方法清除当前所有注入的实例
            container.Clear();
            Log.L("");
            Log.L("容器已清空");
            Log.L("");
        }