关于刘冬大侠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 ...
随机推荐
- java中正则表达式的应用
java.util.regex Pattern的应用 public static void main(String[] args) { //简单的正则匹配.从给定的字符串中匹配正则表达式 //匹配 ...
- 【转】IOS中定时器NSTimer的开启与关闭
原文网址:http://blog.csdn.net/enuola/article/details/8099461 调用一次计时器方法: myTimer = [NSTimer scheduledTime ...
- 自定义View(二)--继承自ViewGroup
自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Dem ...
- cocoa NSFileManager
NSFileManager中包含了用来查询单词库目录.创建.重命名.删除目录以及获取/设置文件属性的方法(可读性,可编写性等等). 每个程序都会有它自己的沙盒,通过它你可以阅读/编写文件.写入沙盒的文 ...
- django-grappelli 安装配置
在python34/scripts文件夹下pip3 install django-grappelli pip安装一般会装在python34的tools或lib之类的文件夹下,一定要找到那个文件夹,gr ...
- AI线性图标教程-转起
- android参考
android:使用BaseExpandableListAdapter实现可折叠的列表 Android-ListView实现SectionIndexer SectionIndexer 的使用(联系人分 ...
- leetcode—jump game
1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...
- 挖坟之Spring.NET IOC容器初始化
因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...
- 使用 XMPP 构建一个基于 web 的通知工具——转
Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...