zoukankan      html  css  js  c++  java
  • 实现一个简单的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         }
  • 相关阅读:
    GuavaCache简介(一)
    四层、七层负载均衡的区别
    腾讯云服务器 Centos6.5 安装 nginx1.12.0
    tomcat8性能优化
    JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论
    java中值传递和引用传递
    架构师书籍
    大型网站架构系列:20本技术书籍推荐
    RabbitMQ
    支付宝付款流程
  • 原文地址:https://www.cnblogs.com/king-tao/p/13407237.html
Copyright © 2011-2022 走看看