来自一位工作一年多的猿的分享 ------- 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。

posted @ 2016-10-27 12:40  R先森  阅读(404)  评论(3编辑  收藏  举报