关于刘冬大侠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 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的一点勘正的更多相关文章
- MVA Universal Windows Apps系列学习笔记1
昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的.里面提到了windows 10.Microsoft edge浏览器.Azure云平台.Office ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- 《Machine Learning》系列学习笔记之第一周
<Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- 第63节:Java中的Spring MVC简介笔记
前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...
- spring揭密学习笔记
spring揭密学习笔记 spring揭密学习笔记(1) --spring的由来 spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
随机推荐
- Oracle buffer cache与相关的latch等待事件
buffer cache与相关的latch等待事件 1.buffer cache 2.latch:cache buffers lru chain 3.latch:cache buffers chain ...
- ios iPhone的一些基础知识,扫盲
iPhone 4(2010 年):初始系统: iOS 4.0(GSM 版) (苹果第一次采用 iOS 为移动系统命名),iOS 4.2.2(CDMA 版)可以升级至:iOS 7.1.2 iPhone ...
- android操作文件
Android中读取/写入文件的方法,与Java中的I/O是一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件.但是在默认状态下,文件是不能在不同的程 ...
- Yii系列教程(四):使用Memcache保存会话
1环境准备 安装Memcached服务端: yum -y installmemcached.x86_64 安装PHP-Memcache扩展: yum -y installphp-pecl-memcac ...
- [转]LoadRunner参数化详解
http://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html 距离上次使用loadrunner 已经有一年多的时间了.初做测试时在项目中用过, ...
- eclipse 恢复被删除的文件
即使你在项目中删除了某一文件,该文件的相关信息仍会保存在本地历史记录中.这就使得你可以恢复那些在项目或文件夹中已被删除的文件.如果恢复某一被删除的文件,则首先在Navigator视图中选择该文件先前所 ...
- win8 VS控件信息
<TextBlock x:Name="button_1" HorizontalAlignment="Center" TextWrapping=" ...
- mybatis源码学习: 编译的方法
mybatis3用了一段时间,抽出时间来研究一下.具体用法参考官方文档就行,源码在这里.mybatis相对而言,规模较小,可以从中学习如何编写高质量的java项目. mybatis3使用maven管理 ...
- 把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend
//把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend //dp[i][j]:把第i个数转成第j小的数,最小花费 //此题与po ...
- MFC学习20160718(GetModuleFileName&&GetAppDataPath)
1.标题栏设置 一.对话框标题栏内容为静态 直接在对话框属性“General”的“Caption”中修改. 二.对话框标题栏内容为动态生成的 在对应对话框的初始化函数OnInitDialog()中添加 ...