自己实现一个IOC(控制翻转,DI依赖注入)容器

1.新建一个控制台应用程序 TestIOC

2.新增一个 IocFactory类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Reflection;
namespace TestIOC
{
   public class IocFactory
    {
       private string _path;
       private Dictionary<string, object> dict = new Dictionary<string, object>();
       public IocFactory(string path)
       { 
       
            this._path=path;      
       }



       public object GetObject(string id)
       {

           XElement xe = XElement.Load(_path);


           var v = from c in xe.Elements("object") select c;

           dict = v.ToDictionary(k => k.Attribute("id").Value,

               s => {

                   string type = s.Attribute("type").Value;
                   Type ty = Type.GetType(type);
                  return Activator.CreateInstance(ty);
                  
               }

               );
          
           return null;
       }

    }
}

 

3.新增一个 PersonDao类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestIOC
{
   public class PersonDao
    {

       public PersonDao()
       {
           Console.WriteLine(" this is PersonDao");
       }


       public PersonDao(string name)
       {
           Console.WriteLine(" this is PersonDao:"+name);
       }
    }
}

 

 

4.首先 新建一个object.xml

<?xml version="1.0" encoding="utf-8" ?>

<objects>

  <object id="PersonDao" type="TestIOC.PersonDao, TestIOC" />

</objects>

 

5.新控制台进行依赖注入

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace TestIOC
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"F:\Q\mytest\spring\TestIOC\TestIOC\object.xml";
            IocFactory ioc = new IocFactory(path);
            PersonDao pd = ioc.GetObject("PersonDao") as PersonDao;


            Console.WriteLine("直接映射");


            Activator.CreateInstance(Type.GetType("TestIOC.PersonDao"));
            Console.ReadLine();
        }
    }
}

 

 

6.显示效果

 

this is PersonDao

直接映射

this is PersonDao

 

源码下载

posted @ 2015-08-20 14:01  甜菜波波  阅读(618)  评论(0编辑  收藏  举报