2.自己搭建的一个简易的ioc容器
2015-03-21 09:55
597 查看
1.persondao类
namespace MyselfIoC
{
public class PersonDao
{
public override string ToString()
{
return "我是PersonDao";
}
}
}
2.xml 工厂文件
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<object id="PersonDao" type="MyselfIoC.PersonDao, MyselfIoC" />
</objects>
3.工厂ioc 构造函数实例化一个ioc工厂的字典
namespace MyselfIoC
{
public class MyXmlFactory
{
private IDictionary<string, object> objectDefine = new Dictionary<string, object>();
public MyXmlFactory(string fileName)
{
//构造函数实例IoC容器
InstanceObjects(fileName); // 实例IoC容器
}
/// <summary>
/// 实例IoC容器
/// </summary>
/// <param name="fileName"></param>
private void InstanceObjects(string fileName)
{
XElement root = XElement.Load(fileName);
var objects = from obj in root.Elements("object") select obj;
objectDefine = objects.ToDictionary(
k => k.Attribute("id").Value,
v =>
{
string typeName = v.Attribute("type").Value;
Type type = Type.GetType(typeName);
return Activator.CreateInstance(type);
}
);
}
/// <summary>
/// 获取对象
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public object GetObject(string id)
{
object result = null;
if (objectDefine.ContainsKey(id))
{
//通过字典获取对象的实例
result = objectDefine[id];
}
return result;
}
}
}
4.调用部分
namespace MyselfIoC
{
class Program
{
static void Main(string[] args)
{
AppRegistry();
Console.ReadLine();
}
static void AppRegistry()
{
MyXmlFactory ctx = new MyXmlFactory(@"D:\Objects.xml");
Console.WriteLine(ctx.GetObject("PersonDao").ToString());
}
}
}
namespace MyselfIoC
{
public class PersonDao
{
public override string ToString()
{
return "我是PersonDao";
}
}
}
2.xml 工厂文件
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<object id="PersonDao" type="MyselfIoC.PersonDao, MyselfIoC" />
</objects>
3.工厂ioc 构造函数实例化一个ioc工厂的字典
namespace MyselfIoC
{
public class MyXmlFactory
{
private IDictionary<string, object> objectDefine = new Dictionary<string, object>();
public MyXmlFactory(string fileName)
{
//构造函数实例IoC容器
InstanceObjects(fileName); // 实例IoC容器
}
/// <summary>
/// 实例IoC容器
/// </summary>
/// <param name="fileName"></param>
private void InstanceObjects(string fileName)
{
XElement root = XElement.Load(fileName);
var objects = from obj in root.Elements("object") select obj;
objectDefine = objects.ToDictionary(
k => k.Attribute("id").Value,
v =>
{
string typeName = v.Attribute("type").Value;
Type type = Type.GetType(typeName);
return Activator.CreateInstance(type);
}
);
}
/// <summary>
/// 获取对象
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public object GetObject(string id)
{
object result = null;
if (objectDefine.ContainsKey(id))
{
//通过字典获取对象的实例
result = objectDefine[id];
}
return result;
}
}
}
4.调用部分
namespace MyselfIoC
{
class Program
{
static void Main(string[] args)
{
AppRegistry();
Console.ReadLine();
}
static void AppRegistry()
{
MyXmlFactory ctx = new MyXmlFactory(@"D:\Objects.xml");
Console.WriteLine(ctx.GetObject("PersonDao").ToString());
}
}
}
相关文章推荐
- Spring.Net学习笔记二(自己用工厂的方式搭建一个IOC容器)
- 自己实现一个IOC(控制翻转,DI依赖注入)容器
- 试图自己写一个IoC容器
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- 写一个自己的Spring框架——简单实现IoC容器功能
- 自己写的一个简单的IOC容器
- 自己实现的一个简易Spring框架(IoC+AOP)
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- 自己动手搭建一个简易的SpringBoot环境
- 自己写一个简单的Spring IOC容器
- 实现一个简易IOC容器
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- 自己实现的Spring IOC容器
- 自己实现一个IOC框架
- 自己搭建一个SSH框架
- 一个IOC容器应该具有的特性
- 几十行代码轻松实现一个IOC容器并实现对Webform的依赖注入(包括对控件的依赖注入)
- 用lighttpd搭建一个简易的http服务器
- 用Eucalyptus轻松搭建一个简易私有云平台