自己实现一个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

源码下载

上一篇:MFC/VC CxImage 简单配置与使用 (完整版)


下一篇:hdu 2222 Keywords Search ac自动机入门