zoukankan      html  css  js  c++  java
  • 2.自己搭建的一个简易的ioc容器

    1.persondao类
    namespace MyselfIoC
    {
        public class PersonDao
        {
            public override string ToString()
            {
                return "我是PersonDao";
            }
        }
    }
    2.xml 工厂文件
    <?xml version="1.0" encoding="utf-8" ?>

    <objects>

      <object id="PersonDao" type="MyselfIoC.PersonDao, MyselfIoC" />
     
    </objects>
    3.工厂ioc 构造函数实例化一个ioc工厂的字典

    namespace MyselfIoC
    {
        public class MyXmlFactory
        {
            private IDictionary<string, object> objectDefine = new Dictionary<string, object>();

            public MyXmlFactory(string fileName)
            {

                //构造函数实例IoC容器
                InstanceObjects(fileName);  // 实例IoC容器
            }

            /// <summary>
            /// 实例IoC容器
            /// </summary>
            /// <param name="fileName"></param>
            private void InstanceObjects(string fileName)
            {
                XElement root = XElement.Load(fileName);
                var objects = from obj in root.Elements("object") select obj;
                objectDefine = objects.ToDictionary(
                        k => k.Attribute("id").Value,
                        v =>
                        {
                            string typeName = v.Attribute("type").Value;  
                            Type type = Type.GetType(typeName);  
                            return Activator.CreateInstance(type);
                        }
                    );
            }

            /// <summary>
            /// 获取对象
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public object GetObject(string id)
            {
                object result = null;

                if (objectDefine.ContainsKey(id))
                {

                   //通过字典获取对象的实例
                    result = objectDefine[id];
                }

                return result;
            }
        }
    }

    4.调用部分

    namespace MyselfIoC
    {
        class Program
        {
            static void Main(string[] args)
            {
                AppRegistry();
                Console.ReadLine();
            }

            static void AppRegistry()
            {
                MyXmlFactory ctx = new MyXmlFactory(@"D:Objects.xml");
                Console.WriteLine(ctx.GetObject("PersonDao").ToString());
            }
        }
    }

  • 相关阅读:
    AIO5岗位桌面主页【我的收藏夹】只显示8行,怎样增加显示行?
    已设置了参考编号的编码规则定义,但是新增单据的时候,没有出来自动编号是什么原因?
    10个TWaver 网页3D可视化精彩案例
    HTML5大数据可视化效果(二)可交互地铁线路图
    无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)
    一款基于HTML5的Web 3D开发工具
    Legolas工业自动化平台入门(三)交互事件响应动作
    Legolas工业自动化平台入门(二)数据响应动作
    Legolas工业自动化平台入门(一)搭建应用
    Legolas工业自动化平台案例 —— 水源地自动化监控系统
  • 原文地址:https://www.cnblogs.com/kexb/p/4355178.html
Copyright © 2011-2022 走看看