这是我第一次写东西记录吧;还记得小学老师教的写文章要有“开篇 起伏 高潮。。。高潮 结束”,反正我不会用上;
最近在研究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。