LYWILL设计运营 - 网站运营与推广、开发技术、成功项目展示。

一个简易的IoC框架

        思路:在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明一个Dictionary<string, object>来存放IoC容器中的对象,还需要写一个能从Dictionary<string, object>中获取对象的方法。

  分析:要获取XML文件的内容,在3.5的语法中,我自然而然想到了Linq To XML。需要实例XML中配置的对象,我们想到了使用反射技术来获取对象的实例。
  

  代码实现

1.xml工厂

C#代码
  1. namespace MyselfIoC   
  2. {   
  3.     public class MyXmlFactory   
  4.     {   
  5.         private IDictionary<stringobject> objectDefine = new Dictionary<stringobject>();   
  6.   
  7.         public MyXmlFactory(string fileName)   
  8.         {   
  9.             InstanceObjects(fileName);  // 实例IoC容器   
  10.         }   
  11.   
  12.         /// <summary>   
  13.         /// 实例IoC容器   
  14.         /// </summary>   
  15.         /// <param name="fileName"></param>   
  16.         private void InstanceObjects(string fileName)   
  17.         {   
  18.             XElement root = XElement.Load(fileName);   
  19.             var objects = from obj in root.Elements("object") select obj;    
  20.             objectDefine = objects.ToDictionary(   
  21.                     k => k.Attribute("id").Value,    
  22.                     v =>    
  23.                     {   
  24.                         string typeName = v.Attribute("type").Value;     
  25.                         Type type = Type.GetType(typeName);     
  26.                         return Activator.CreateInstance(type);   
  27.                     }   
  28.                 );   
  29.         }   
  30.   
  31.         /// <summary>   
  32.         /// 获取对象   
  33.         /// </summary>   
  34.         /// <param name="id"></param>   
  35.         /// <returns></returns>   
  36.         public object GetObject(string id)   
  37.         {   
  38.             object result = null;   
  39.   
  40.             if (objectDefine.ContainsKey(id))   
  41.             {   
  42.                 result = objectDefine[id];   
  43.             }   
  44.   
  45.             return result;   
  46.         }   
  47.     }   
  48. }   

 

 

2.调用

C#代码
  1. namespace MyselfIoC   
  2. {   
  3.     class Program   
  4.     {   
  5.         static void Main(string[] args)   
  6.         {   
  7.             AppRegistry();   
  8.             Console.ReadLine();   
  9.         }   
  10.         static void AppRegistry()   
  11.         {   
  12.             MyXmlFactory ctx = new MyXmlFactory(@"\Objects.xml");   
  13.             Console.WriteLine(ctx.GetObject("PersonDao").ToString());   
  14.         }   
  15.     }   
  16. }  
 

标签: Spring.NET

作者:lywill 分类:开发技术 浏览:2682 评论:0