• Spring.Net学习笔记二(自己用工厂的方式搭建一个IOC容器)


       第一篇文章大致能跑起来一个基于Spring.Net程序,现在这篇主要的是介绍自己如何搭建一个IOC容器,以便更好的理解和掌握IOC。

       第一步:用字典模拟IOC容器。

       

     1  public class IOCFactory
     2     {
     3         private IDictionary<string, object> IocDict = new Dictionary<string, object>();
     4         public IOCFactory(string fileName)
     5         {
     6             XElement root = XElement.Load(fileName);
     7 
     8             XNamespace space = "http://www.springframework.net";
     9             var objects = from obj in root.Elements(space + "object") select obj;
    10             IocDict = objects.ToDictionary(
    11                     k => k.Attribute("name").Value,
    12                     v =>
    13                     {
    14                         string typeName = v.Attribute("type").Value;
    15                         Type type = Type.GetType(typeName);
    16                         return Activator.CreateInstance(type);
    17                     }
    18                 );
    19         }
    20         /// <summary>
    21         /// 获取对象
    22         /// </summary>
    23         /// <param name="id"></param>
    24         /// <returns></returns>
    25         public object GetObject(string name)
    26         {
    27             object result = null;
    28             if (IocDict.ContainsKey(name))
    29             {
    30                 result = IocDict[name];
    31             }
    32             return result;
    33         }
    34     }

    第二步:调用代码

       

     1  static void Main(string[] args)
     2         {
     3             var path = @"E:codeIOCDemoMovieAppObjects.xml";
     4             IOCFactory factory = new IOCFactory(path);
     5             IPersonDao dao = (IPersonDao)factory.GetObject("PersonDao");
     6             if (dao != null)
     7             {
     8                 dao.Save();
     9                 Console.WriteLine("我是IoC方法");
    10                 Console.ReadKey();
    11             }
    12             Console.ReadLine();
    13         }

    第三步:配置文件

    1 <objects xmlns="http://www.springframework.net">
    2   <!--这里放容器里面的所有节点-->
    3   <description>An  example that demonstrates simple IoC features.</description>
    4   <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
    5   <object name="PersonDao" type="Dao.PersonDao1,Dao">
    6   </object>
    7 </objects>
    8   

    运行结果:

      在这次测试中,无意中遇到Linq TO XML的时候root.Elements("object")返回值为null,后面才知道是因为命名空间的缘故,接受的参数是XName,XName与String存在隐式转换,但是带命令空间的XML,必须要带命名空间,不然无法得到想要的值,通过反编译工具,public static XName operator +(XNamespace ns, string localName); 只要把XNamespace加上本地名称(string),就是一个XName了,故直接连接即可。

  • 相关阅读:
    深入浅出Win32多线程程序设计【2】线程控制
    深入浅出Win32多线程程序设计【1】基本概念
    在两个ASP.NET页面之间传递值
    Javascript基础
    DataGrid的几个小技巧
    推荐取代Visio的中国人的软件——Edraw
    ASP.NET如何防范SQL注入攻击
    软件版本号规定原则
    三层体系结构总结(三)
    .Net工具 .NET文档生成工具2.2
  • 原文地址:https://www.cnblogs.com/wangyhua/p/IOC1.html
Copyright © 2020-2023  润新知