来自一位工作一年多的猿的分享 ------- ioc
这是我第一次写东西记录吧;还记得小学老师教的写文章要有“开篇 起伏 高潮。。。高潮 结束”,反正我不会用上;
最近在研究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的更多相关文章
- 能让你聪明的工作DEAL四法则,来自《每周工作四小时》书籍
来自书籍<每周工作四小时>,作者蒂莫西·费里斯(Tim Ferriss,昵称:蒂姆) 能让你聪明的工作DEAL四法则: 第一步:D——定位(Definition) 第二步:E——精简( ...
- ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。
阿里巴巴技术大牛黄勇的经验分享,感觉很受用. 关于IT 职场经验 1. 把技术当成工具 技术这东西,其实一点都不神秘,它只不过是一个工具,用这个工具可以帮助我们解决实际问题,就这么简单. 我们每天在面 ...
- 一位工作8年的java软件工程师该如何发展
从08年到现在已工作8年多了,但是对职业生涯的规划还没有很清晰的定义,可能之前做的工作太杂太广,回想第一家公司从事了6年有得也有失,虽然涉及到开发.设计.管理等岗位,但从技术上总结并没有很擅长的技术, ...
- POPTEST老李推荐:互联网时代100本必读书,来自100位业界大咖推荐 2
➤NO.30<移动的力量>[推荐人]刘九如:电子工业出版社副社长兼总编辑邬贺铨:中国工程院院士.原副院长汪力成:华立集团董事局主席➤NO.31<智慧社会>[推荐人]段永朝:财讯 ...
- [MarsZ]程序猿谈大学之工作三年半的程序猿给大学童鞋的一些注释
我本不是个喜欢写文章的人,更甭提写这种基本没技术含量的文章了.但是今天上班的时候,不经意浏览了下学校的QQ群,突然很想把自己的经验经历分享给还在大学里的同学,希望能让某些对前途职业迷茫的童鞋有所帮助. ...
- 工作中常用的JS函数整理分享(欢迎大家补充)
今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...
- 来自IOS开发工程师的零基础自学HTML5经验分享
移动互联网的火爆,而Html具有跨平台.开发快的优势,越来越受到开发者的青睐.感谢IOS开发工程师“小木___Boy”’带来的HTML5学习经验分享. 一.学习途径 1.很多视频网站 比如慕课.和极客 ...
- 用VC进行64位编程
用VC进行64位编程 分类: C/C++2014-04-30 15:14 532人阅读 评论(0) 收藏 举报 本文转自:http://www.usidcbbs.com/read-htm-tid-52 ...
- 无光驱在32位windows系统下安装64位windows系统
位的系统. 大家都知道,32位的操作系统最多只能支持3.2G的内存,现在内存白菜价,很多人都在原有基础上购入新内存,这样最少也有4G了,为了让内存不浪费,我 们只有升级到64位操作系统.但是很多朋友又 ...
随机推荐
- 搭建 redis 3.2.8服务器
实验环境 redis 3.2.8 + RHEL 7.3 系统 软件下载地址 http://download.redis.io/releases/redis-3.2.8.tar.gz #注意,我的软件包 ...
- poptest老李谈jvm的GC
poptest老李谈jvm的GC poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...
- Android开发艺术1之Activity的生命周期
作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...
- Java ---理解MVC架构
之间的文章,我们主要是介绍了jsp的相关语法操作,我们可以通过请求某个jsp页面,然后由相对应的servlet实例给我们返回html页面.但是在实际的项目中,我们很少会直接的请求某个页面,一般都是请求 ...
- js根据条件json生成随机json:randomjson
前端开发中,在做前后端分离的时候,经常需要手写json数据,有3个问题特别揪心: 1,数据是写死的,不能按一定的条件随机生成长度不一,内容不一的数据 2,写数组的时候,如果有很多条,需要一条一条地写, ...
- JavaWeb总结(十)—文件上传和下载
一.文件的上传 1.文件的基本上传 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择 ...
- 使用点击二分图计算query-document的相关性
之前的博客中已经介绍了Ranking Relevance的一些基本情况(Click Behavior,和Text Match):http://www.cnblogs.com/bentuwuying/p ...
- Ubuntu下安装Tomcat7
第一部分:基本安装 1.打开http://tomcat.apache.org/download-70.cgi,下载apache-tomcat-7.0.68.zip. 2.拷贝至合适位置,如/usr/l ...
- java 解析xml文档---通过XmlPullParser解析方式
package com.zx; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayLi ...
- jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具
jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...