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

转载于:https://www.cnblogs.com/Redefine/p/6003529.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值