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:QmytestspringTestIOCTestIOCobject.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