• 实现一个简单的IOC框架


    最近在spring.net框架,首篇学习了IOC/DI。通过简单的学习,我们是从配置xml文件中,添加<object>节点,然后创建容器,再创建容器对象。所以,实现一个ioc,一。需要读取配置文件xml中的节点对象 二。通过反射,将ioc对象,保存到一个字典中。

    IOC/DI:反转了以往web程序创建所需对象及对象依赖,而是通过容器对象创建对象,并查找或创建容器对象所需依赖,并注入对象中。让容器控制了外部资源的获取。

    <?xml version="1.0" encoding="utf-8" ?>
    <objects>
        <object name="myIoc" type="SimpleIOC.model.Customer,SimpleIOC"></object>
    </objects>

    一。创建XML工厂类,加载xml文件,读取文件。并反射,维护容器对象到字典表中。

     public class MyXmlFactory
        {
            //声明字典对象保存IOC容器对象
            private Dictionary<string, object> xmlObject = new Dictionary<string, object>();
    
            public MyXmlFactory(string fileName) 
            {
                //创建ioc容器
                InstanceObject(fileName);
            }
    
            public void InstanceObject(string fileName) 
            {
                XElement rootXml = XElement.Load(fileName);//从xml文件中加载xml元素
                //使用linq to xml 获取xml文件中的配置对象
                var objects = from obj in rootXml.Elements("object") select obj;
                xmlObject = objects.ToDictionary(k => k.Attribute("name").Value, v => {
                    string typeName = v.Attribute("type").Value;
                    Type type = Type.GetType(typeName);//通过反射获取指定类型名称名称
                    return Activator.CreateInstance(type);//通过类型名称,创建容器对象
                });
            }
            /// <summary>
            /// 通过key值,从容器对象字典中获取对象
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public object GetObject(string id) 
            {
                object result = null;
                xmlObject.TryGetValue(id, out result);
                return result;
            }
        }

    二。调用xml工厂,获取容器创建对象

    1 public static void Main(string[] args)
    2         {
    3             MyXmlFactory factory = new MyXmlFactory(@"F:StudyCodeSpringIOC手搭IOC框架SimpleIOCXMLioc.xml");
    4             //Customer customer = (Customer)factory.GetObject("myIoc");
    5             Console.WriteLine(factory.GetObject("myIoc").ToString());
    6             Console.ReadKey();
    7         }
  • 相关阅读:
    逻辑卷管理LVM (Logical Volume Manager)
    Windows Server 2008 R2 域控修改域用户密码复杂性
    win7 加域开机自动登录域用户
    红帽Linux 配置VNC桌面远程工具
    Redhat linux 挂载命令mount
    SUSE Linux 防火墙设置
    IPv4 地址分类
    常用RAID简介_001
    Element UI
    ie中datepicker赋值不成功
  • 原文地址:https://www.cnblogs.com/king-tao/p/13407237.html
Copyright © 2020-2023  润新知