诚如他第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 Settings\Administrator\桌面\IocEasy\IocEasy\Object.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);
}
);
}

如此才能正常读取数据。

关于刘冬大侠Spring.NET系列学习笔记3的一点勘正的更多相关文章

  1. MVA Universal Windows Apps系列学习笔记1

    昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的.里面提到了windows 10.Microsoft edge浏览器.Azure云平台.Office ...

  2. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  3. 《Machine Learning》系列学习笔记之第一周

    <Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...

  4. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  5. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  6. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  7. 第63节:Java中的Spring MVC简介笔记

    前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...

  8. spring揭密学习笔记

    spring揭密学习笔记 spring揭密学习笔记(1) --spring的由来 spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念

  9. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

随机推荐

  1. HDU 4766 Network

    题意   就是找到一个 位置 使得路由器可以覆盖所有英雄    可以不覆盖主人自己, 找到距离 主人房子最近的位置,距离为多少 没想到  其实是道水题啊!!  分三个情况讨论 第一个情况    如果 ...

  2. cocos2dc-x解决中文乱码

    中文乱码: 方法一: 选中有中文的那个cpp,点文件另存为,在保存这里竟然有个小箭头 点之,再点编码保存 再选这个编码 这个cpp就UTF-8化了,然后中文就正常了. 但是发现:但字符串字符数为奇数时 ...

  3. Event/window.Event属性和方法

    type:事件的类型,如onlick中的click:srcElement/target:事件源,就是发生事件的元素:button:声明被按下的鼠标键,整数,1代表左键,2代表右键,4代表中键,如果按下 ...

  4. 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现

    一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...

  5. ADO.NET+Access: 2,至少一个参数没有被指定值

    ylbtech-Error-ADO.NET+Access: 2,至少一个参数没有被指定值. 1.A,错误代码返回顶部  2,至少一个参数没有被指定值. 1.B,出错原因分析返回顶部  未解决 1.C, ...

  6. hibernate建表多对多建表

    Student.java package cn.itcast.hiberate.sh.domain; import java.util.Set; public class Student { priv ...

  7. Ubuntu 16.04 TensorFlow CPU 版本安装

    1.下载Anaconda,官方网站.我下载的时Python 2.7 64bit版本: 2.安装执行命令     bash Anaconda2-4.2.0-Linux-x86_64.sh 设置好目录后等 ...

  8. Prototype入门

    官网地址:http://prototypejs.org/ Prototype降低了客户端web编程的复杂性.为了解决现实存在的一些问题,Prototype对浏览器的脚本环境做了一些扩展,对原先笨拙的A ...

  9. 剑指offer

    今天完成了剑指offer上的66道编程题,感觉自己还是很多代码实现能力和算法积累都还不够!还需要继续联系,坚持自己独立写代码实现. 最后将今天的两道题目奉上,都有异曲同工之妙: 矩阵中的路径: #in ...

  10. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...