这是我第一次写东西记录吧;还记得小学老师教的写文章要有“开篇 起伏 高潮。。。高潮 结束”,反正我不会用上;

最近在研究IOC这玩意;百度了很多关于这方面的帖子;关于IOC和DI的关系;我不想多说什么;因为我也没搞懂;反正感觉很亲密的感觉;有的人认为IOC就是DI,但是我个人认为并不是(IOC != DI);等我搞懂了再说吧;

现在来分享一下我最近写了一个和IOC有关的东西“Redefine.Ioc”,git:https://github.com/Mr-Ray/Redefine.Ioc 他没有华丽的外衣,没有构造注入(我认为构造注入不太舒服),他的规则很简单。

通过 InterfaceAttribute、ImpAttribute和InjectionAttribute,但是这样就有代码上的依赖,不过慢慢会改进的。

首先把“东西”注册到容器中去:

填加到容器中,过后

嗯,大概思路是这样的,再说一下这东西怎么玩,直接上代码了

定义接口的时候需要添加上InterfaceAttribute的属性

[Redefine.IOC.AttrEntity.Interface]
public interface IFrist
{
void Run();
}

接口实现的时候要添加上ImpAttribute属性,属性注入要添加上InjectionAttribute

[Redefine.IOC.AttrEntity.Imp]
public class Frist : IFrist
{
//属性注入要添加上InjectionAttribute
[Redefine.IOC.AttrEntity.Injection]
private ITwo Two { get; set; } public void Run()
{
Console.WriteLine("Frist Running...");
Two.Run();
}
}

先把东西注册到容器中去

Reg.Init(x =>
{
//单个接口注入
x.Register<IFrist, Frist>();
//注入程序集
x.Register("Test.Interface");
//注入程序集
x.Register("Test.Impl");
//配置文件
x.RegisterFormFile("../../config.xml");
}); 

或者这样注册

IRegister reg = new Reg();
reg.Register<IFrist,Frist>();
//单个接口注入
reg.Register<IFrist, Frist>();
//注入程序集
reg.Register("Test.Interface");
//注入程序集
reg.Register("Test.Impl");
//配置文件
reg.RegisterFormFile("../../config.xml");
Reg.Init();

然后就是怎么把它取出来了。。

//单个接口
IFrist run = ObjectFactory.GetObject<IFrist>();
run.Run(); //一个接口 多个实现
IEnumerable<IFrist> list = ObjectFactory.GetObjects<IFrist>();
foreach (var item in list)
{
item.Run();
Console.WriteLine("----------------------------------------------------------");
}

基本上差不多就酱紫就完成了,下一步我会把这样那样的属性给删除了,减少代码的侵入,一步一步优化它。。

git:https://github.com/Mr-Ray/Redefine.Ioc  请大发慈悲的给个star。

来自一位工作一年多的猿的分享 ------- ioc的更多相关文章

  1. 能让你聪明的工作DEAL四法则,来自《每周工作四小时》书籍

    来自书籍<每周工作四小时>,作者蒂莫西·费里斯(Tim Ferriss,昵称:蒂姆)   能让你聪明的工作DEAL四法则: 第一步:D——定位(Definition) 第二步:E——精简( ...

  2. ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。

    阿里巴巴技术大牛黄勇的经验分享,感觉很受用. 关于IT 职场经验 1. 把技术当成工具 技术这东西,其实一点都不神秘,它只不过是一个工具,用这个工具可以帮助我们解决实际问题,就这么简单. 我们每天在面 ...

  3. 一位工作8年的java软件工程师该如何发展

    从08年到现在已工作8年多了,但是对职业生涯的规划还没有很清晰的定义,可能之前做的工作太杂太广,回想第一家公司从事了6年有得也有失,虽然涉及到开发.设计.管理等岗位,但从技术上总结并没有很擅长的技术, ...

  4. POPTEST老李推荐:互联网时代100本必读书,来自100位业界大咖推荐 2

    ➤NO.30<移动的力量>[推荐人]刘九如:电子工业出版社副社长兼总编辑邬贺铨:中国工程院院士.原副院长汪力成:华立集团董事局主席➤NO.31<智慧社会>[推荐人]段永朝:财讯 ...

  5. [MarsZ]程序猿谈大学之工作三年半的程序猿给大学童鞋的一些注释

    我本不是个喜欢写文章的人,更甭提写这种基本没技术含量的文章了.但是今天上班的时候,不经意浏览了下学校的QQ群,突然很想把自己的经验经历分享给还在大学里的同学,希望能让某些对前途职业迷茫的童鞋有所帮助. ...

  6. 工作中常用的JS函数整理分享(欢迎大家补充)

    今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...

  7. 来自IOS开发工程师的零基础自学HTML5经验分享

    移动互联网的火爆,而Html具有跨平台.开发快的优势,越来越受到开发者的青睐.感谢IOS开发工程师“小木___Boy”’带来的HTML5学习经验分享. 一.学习途径 1.很多视频网站 比如慕课.和极客 ...

  8. 用VC进行64位编程

    用VC进行64位编程 分类: C/C++2014-04-30 15:14 532人阅读 评论(0) 收藏 举报 本文转自:http://www.usidcbbs.com/read-htm-tid-52 ...

  9. 无光驱在32位windows系统下安装64位windows系统

    位的系统. 大家都知道,32位的操作系统最多只能支持3.2G的内存,现在内存白菜价,很多人都在原有基础上购入新内存,这样最少也有4G了,为了让内存不浪费,我 们只有升级到64位操作系统.但是很多朋友又 ...

随机推荐

  1. javaweb浏览器随机输出一张验证码图片

    一.在web.xml中的配置如下: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns: ...

  2. 关于ng的路由的几点想法(ui-view)

    在配置路由的时候,我们可以选择ng框架自带的路由,也可以使用第三方路由插件ui-router 注意: (1)在使用angular-ui-router的时候,必须先引入angular-ui-router ...

  3. 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)

    翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)   以下文章是送给来poptest学习测试开发工程师的学员们,很多人想测试工程 ...

  4. (转)JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  5. 云计算之路-阿里云上:RDS数据库连接数过万引发故障,主备库切换后恢复正常

    非常抱歉!今天 12:03-12:52 ,由于数据库连接数异常突增超过1万,达到了阿里云RDS的最大连接数限制,影响了全站的正常访问.由此给您带来麻烦,请您谅解. 在发现数据库连接数突增的问题后,我们 ...

  6. CF #404 (Div. 2) B. Anton and Classes (贪心)

    题意:有一个小朋友,即喜欢下象棋,还喜欢编程,于是他打算上这两种课的兴趣班,这两种课有着不同的上课时间,他想让两堂课之间的休息时间最多,问最大时间是多少 思路:看到这道题的第一反应就是贪心,于是用结构 ...

  7. JAVA加密算法系列-AesCBC

    package ***; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.cryp ...

  8. 如何精准高效的实现视觉稿?------前端开发辅助工具AlloyDesigner使用介绍

    AlloyDesigner:http://alloyteam.github.io/AlloyDesigner/ 介绍:AlloyDesigner是腾讯开发的一款工具,其在页面构建过程中,直接嵌入开发的 ...

  9. iptables配置详解

    iptables主要参数 -A 向规则链中添加一条规则,默认被添加到末尾 -T指定要操作的表,默认是filter -D从规则链中删除规则,可以指定序号或者匹配的规则来删除 -R进行规则替换 -I插入一 ...

  10. React之key详解

    一个例子 有这样的一个场景如下图所示,有一组动态数量的input,可以增加和删除和重新排序,数组元素生成的组件用index作为key的值,例如下图生成的ui展示: 上面例子中的input组件渲染的代码 ...