首页 > 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正

关于刘冬大侠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.nethttp://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);});}

如此才能正常读取数据。

 

转载于:https://www.cnblogs.com/dashan/p/3678839.html

更多相关:

  • IHostingEnviroment 获取环境相关洗洗 IsDevelopment()、IsStaging()、IsProduction() 分别为:开发、准生产、生产环境 IsEnviroment("Uat") 自定义环境,比如自定义Uat环境 新建: appsettings.Uat.json文件 {"Enviroment":...

  • 七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板其实就是在WinForm类似于Dock属性的元 素。DockPanel会对每个子元素进行排序,并停靠在面板的一侧,多个停靠在同侧的元素则按顺序排序。     如果将 LastChild...

  • 该链接有导入,导出源码,我的代码有下链接改写,完善而成的, http://www.cnblogs.com/colder/p/3611906.html using System;using System.Collections.Generic;using System.Linq;using System.Web;using System...

  • 转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成。设计一个tool,利用Records.BypassLocks...

  • C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html)  提到了ThreadId是一样的,突然想到在WinForm中,非UI线程是无法直接更新UI线程上的控件的问题。 于是做了如下测试: using System; using System.Collectio...

  • importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  •   1 public class FrameSubject extends JFrame {   2    3   …………..   4    5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个   6    7   //java.util.Observerable对象了。   8    9   DateSub...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...