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

最近在研究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. 【VB超简单入门】六、基本数据类型

    接下来要介绍VB的基本数据类型,为接下来学习变量和常量准备. 计算机只能处理二进制的数据,所以无论什么数据,在CPU里面处理都是一样的,类似101010这样的机器代码,但是让我们直接去写机器代码程序, ...

  2. asp.net core源码飘香:Configuration组件

    简介: 这是一个基础组件,是一个统一的配置模型,配置可以来源于配置文件(json文件,xml文件,ini文件),内存对象,命令行参数,系统的环境变量又或者是你自己扩展的配置源,该组件将各个配置源的数据 ...

  3. windows系统System32中各种实用的工具

    工具类 这些工具可以直接打开运行  输入名字就可以调出来了 我还会上传一个java程序,运行后会显示一个界面,直接调用这些工具 1.SnippingTool.exe   截图 2.calc.exe   ...

  4. MongoDB基础教程系列--第七篇 MongoDB 聚合管道

    在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...

  5. 读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数

    1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例 ...

  6. 【iOS】7.4 定位服务->3.4 地图框架MapKit 功能4:地图截图

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  7. java线程池ThreadPoolExector源码分析

    java线程池ThreadPoolExector源码分析 今天研究了下ThreadPoolExector源码,大致上总结了以下几点跟大家分享下: 一.ThreadPoolExector几个主要变量 先 ...

  8. Java Script 字符串操作

    JS中常用几种字符串操作: big() small() bold() fontcolor() fontsize() italics() strike() link() charAt() charCod ...

  9. 第六章 Hibernate关联映射

    第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...

  10. Unity加载场景、计时器、加载时不销毁某物体

    异步加载场景,SceneManager.LoadSceneAsync(SceneName);需引用 using UnityEngine.SceneManagement;命名空间, Applicatio ...