自己实现一个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
自己实现一个IOC(控制翻转,DI依赖注入)容器的更多相关文章
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- laravel服务容器(IOC控制反转,DI依赖注入),服务提供者,门脸模式
laravel的核心思想: 服务容器: 容器:就是装东西的,laravel就是一个个的对象 放入:叫绑定 拿出:解析 使用容器的目的:这里面讲到的是IOC控制反转,主要是靠第三方来处理具体依赖关系的解 ...
- Spring专题2: DI,IOC 控制反转和依赖注入
合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...
- Spring.Net控制翻转、依赖注入、面向切面编程
Spring.Net快速入门:控制翻转.依赖注入.面向切面编程 Spring.Net主要功能: 1.IoC:控制翻转(Inversion of Control) 理解成抽象工厂翻转控制:就是创建对象 ...
- Spring.Net快速入门:控制翻转、依赖注入、面向切面编程
Spring.Net主要功能: 1.IoC:控制翻转(Inversion of Control) 理解成抽象工厂翻转控制:就是创建对象的权利由开发人员自己控制New,转到了由容器来控制. 2.DI: ...
- Java Web实现IOC控制反转之依赖注入
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...
- (转)Ioc控制反转和依赖注入
转载地址:https://zhuanlan.zhihu.com/p/95869440 控制反转控制反转(Inversion of Control,简称IoC),是面向对象编程中的一种设计思想,其作用是 ...
- Spring的IOC控制反转和依赖注入-重点-spring核心之一
IoC:Inverse of Control(控制反转): 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,好比于MVC.就是将原本在程序中手动创建对象的控制权,交由S ...
- OO思想举例,控制翻转,依赖注入
(转自kumaws,原帖地址:http://www.cnblogs.com/kumaws/archive/2009/04/06/from_interface_to_DependencyInjectio ...
- 如何构建一个轻量级级的DI(依赖注入)
概念:依赖注入与IOC模式类似工厂模式,是一种解决调用者和被调用者依赖耦合关系的模式:它解决了对象之间的依赖关系,使得对象只依赖IOC/DI容器,不再直接相互依赖,实现松耦合,然后在对象创建时,由IO ...
随机推荐
- 转:LoadRunner检查点使用小结
LR中检查点有两种:图片和文字. 常用检查点函数如下: 1)web_find()函数用于从 HTML 页中搜索指定的文本字符串: 2)web_reg_find()函数注册一个请求,以在下一个操作函数( ...
- Angularjs循环二维数组
<div ng-app> <div ng-controller="test"> <div ng-repeat="links in slide ...
- 利用transform制作幻灯片
html代码 <html><head></head><body><div class='hpic'> <ul style=" ...
- vsftp访问异常
在LINUX下vsftp建立一个FTP服务器,但通过ftp的命令控制台使用FTP时,ls无法查看目录, 当然更无法上传下载文件了! 出错如下 : ftp> ls 227 Entering Pas ...
- C#中Form窗体中读取EXCEL的数据
使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可 首先引用Microsoft.EXEL 代码如下: using System; using System.Colle ...
- 【栈】 poj 1363
poj1363,这道题是数据结构与算法中的经典问题,给定一组进栈顺序,问栈有多少种出去的顺序. #include<stdio.h> #include <stack> #incl ...
- ural1772 Ski-Trails for Robots
Ski-Trails for Robots Time limit: 1.0 secondMemory limit: 64 MB One of the stages of the Robot Cross ...
- hrbustoj 2283 heap解题报告
这是我们校赛的一道题,给一个字符串,判断这是字符串描绘的是不是一个堆,并不难,只是一个简单的模拟,但是也稍微有点麻烦,最起码我的方法代码量比较大,主要用栈做一个父亲与儿子的位置匹配,匹配的方法应该有很 ...
- webView.loadUrl("file:///android_asset/table3.html")出现中文乱码的问题
webSettings.setDefaultTextEncodingName("UTF-8");
- docker rancher 体验 (未完待续.....)
docker rancher 体验 官方 githubhttps://github.com/rancher/rancher 环境说明: 10.6.0.14010.6.0.18710.6.0.188 修 ...