zoukankan      html  css  js  c++  java
  • 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正

    诚如他第22楼“只因渴求等待”提出的疑问一样,他的下面那一段代码是存在一点点问题的,

    XElement root = XElement.Load(fileName);
                var objects = from obj in root.Elements("object") select obj;

    如果照搬照抄刘冬大侠的这段代码那是不会成功读取数据的,窃以为这应该是刘冬大侠故意埋的一雷吧。

    根据他的文章,我实践了一遍:

    先创建了几个类,一个Person类; 一个Man类; 一个Woman类,一共3个类,后面会将根据这个三个类创建xml文档;

    Person:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace IocEasy
    {
        public class Person
        {
            public string Name { get; set; }
            public string Sex { get; set; }
    
            public Person()
            {
            }
    
            public void Eat(string something)
            {
                Console.WriteLine(something);
            }
    
            public void MakeLove(Person person)
            {
                switch (person.Sex)
                {
                    case "": Console.WriteLine(this.Name + "" + person.Name + "只能搞基"); break;
                    case "": Console.WriteLine(this.Name + "" + person.Name + "可以相爱"); break;
                    default: break;
                }
            }
    
        }
    }

    Man:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace IocEasy
    {
        public class Man : Person
        {
            public Man()
            {
            }
    
            public Man(string name, string sex)
            {
                base.Name = name;
                base.Sex = sex;
            }
        }
    }

    Woman:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace IocEasy
    {
        public class Woman : Person
        {
            public Woman()
            {
            }
    
            public Woman(string name, string sex)
            {
                base.Name = name;
                base.Sex = sex;
            }
        }
    }

    接下来就根据上面三个类(随手写的)创建xml文档,

    Object.xml:

    <?xml version="1.0" encoding="utf-8" ?>
    
    
    <objects xmlns="http://www.springframework.net"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.net
            http://www.springframework.net/xsd/spring-objects.xsd">
      <object id="Person" type="IocEasy.Person,IocEasy" ></object>
      <object id="Man" type="IocEasy.Man,IocEasy" ></object>
      <object id="Woman" type="IocEasy.Woman,IocEasy" ></object>
    
    </objects>

    跟着就是XmlFcatory类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Linq;
    using System.Data;
    using System.Xml;
    
    namespace IocEasy
    {
        public class XmlFactory
        {
            private IDictionary<string, object> objectDefine = new Dictionary<string, object>();
    
            public XmlFactory(string fileName) 
            {
                InstanceObjects(fileName);
            }
    
            private void InstanceObjects(string fileName)
            {
                XNamespace ns = "http://www.springframework.net";
                XName name = ns + "object";
                XElement root = XElement.Load(fileName);            
                var objects = from obj in root.Elements(name) select obj;
                objectDefine = objects.ToDictionary(
                    k => k.FirstAttribute.Value,
                    v =>
                    {
                        string typeName = v.Attribute("type").Value;
                        Type type = Type.GetType(typeName);
                        return Activator.CreateInstance(type);
                    }
                );
            }
    
            public object GetObject(string id)
            {
                object result = null;
                if (objectDefine.ContainsKey(id))
                {
                    result = objectDefine[id];
                }
                return result;
            }
    
        }
    }

    最后在就是主程序入口处调用了:

    Program类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace IocEasy
    {
        class Program
        {
            static void Main(string[] args)
            {
                AppRegister();
                Console.ReadLine();
            }
    
            static void AppRegister()
            {
                XmlFactory ctx = new XmlFactory(@"C:Documents and SettingsAdministrator桌面IocEasyIocEasyObject.xml");
                Person p1 = ctx.GetObject("Man") as Person;
                p1.Name = "Euler";
                p1.Sex = "";
                Person p2 = ctx.GetObject("Woman") as Person;
                p2.Name = "Echo";
                p2.Sex = "";
    
                p1.Eat(p1.Name + "喜欢抽烟");
                p2.Eat(p2.Name + "喜欢旅行");
    
                p1.MakeLove(p2);
            }
        }
    }

    这是一个完整的实践,只不过其中的谬误稍作修改罢了。

    修改的代码如下:

    private void InstanceObjects(string fileName)
            {
                XNamespace ns = "http://www.springframework.net";
                XName name = ns + "object";
                XElement root = XElement.Load(fileName);            
                var objects = from obj in root.Elements(name) select obj;
                objectDefine = objects.ToDictionary(
                    k => k.Attribute("id").Value,//k.FirstAttribute.Value,
                    v =>
                    {
                        string typeName = v.Attribute("type").Value;
                        Type type = Type.GetType(typeName);
                        return Activator.CreateInstance(type);
                    }
                );
            }

    如此才能正常读取数据。

  • 相关阅读:
    Java 垃圾回收机制
    Android 图片旋转(使用Matrix.setRotate方法)
    antd design vue 设置 v-decorator 的初始值
    校验 url 是否以http 或者https 开头
    有效的括号
    堆排序
    归并排序
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/dashan/p/3678839.html
Copyright © 2011-2022 走看看