注射器 0.9

注射器 0.9

测试已测试
语言语言 Obj-CObjective C
许可证 自定义
发布最后发布2014年12月

未指定维护。



  • Tomek Cejner

注射器框架

Objective-C的敏捷依赖注入


注射器是一个针对Objective-C的超轻量级、简单易用的依赖注入框架。它主要受到Java世界类似工具的启发,例如SpringGoogle Guice

注射器的使用非常简单。您想要注入的类只需要实现一个空的协议即可。不需要任何配置;框架能自动发现所有可注入的对象,并创建实例缓存。请参阅下面的安装说明。

什么是依赖注入?

它有时被称为“好莱坞原则”的一种实现。好莱坞原则是以业余爱好者筛选失败后给予的回答命名的:“别打电话给我们,我们给你打电话”。但与好莱坞制片人相反,DI框架将信守承诺。想象一下Car类及其密切合作者Engine。在旧时代,你会创建一个类,例如,在Car的构造器中,就会创建一个Engine实例。这工作得很好,但在编程书中的例子中。通常你会有更多的合作者,很快你将需要为其他类提供同一个Engine实例。

这时恶魔开始微笑,在耳边低语:“亲爱的开发者,对类之间的连接网络感到麻烦吗?试试单例模式,你不必担心将已创建的实例传递给所有相关方”。直到最近,大多数Objective-C开发者还是听了单例恶魔的话。

用法

注射器被设计得尽可能简单。它还没有(尚)像Spring那样强大和灵活,但它完成了基本的工作。Objective-C运行时非常强大,这允许魔法发生。

  1. 克隆Git仓库
  2. 将“SyringeCore”目录下的源代码添加到您的Xcode项目。
  3. 将以下单行添加到前缀头文件

    #include "Syringe.h"
    
  4. 使用Injectable协议注释您想注入的类,例如。

    @interface Car : NSObject <Injectable> { 
       …
    }
    
  5. 注射器做很多魔法,但必须从Syringe手动获取树形结构的第一个对象。您可以使用此简单宏进行操作。

    Car *car = inject(Car);
    
  6. 这就是全部!如果存在引用其他Injectable注释类的ivar,它们将被自动填充。

    @interface Car : NSObject <Injectable> { 
       Engine *engine;  
    }
    

    在上面的例子中,Engine 类遵从 Injectable 协议,其实例将在启动时创建并自动注入到 Car 中。

就是这样

无需烦恼,无需配置。注射器采取了简化的方法,但适用于大多数情况。假设一旦类被标记为 "Injectable",在遇到匹配类型的 ivar 时,它将自动进行依赖注入。

提示

整个子系统在首次调用 inject() 时初始化。它会扫描项目中所有的类,并急切地初始化遵从 Injectable 协议的类。

您可以在方便的时候手动启动 DI 容器

    [BeanFactory bootstrap];

初始化后

注射器不支持带参数的构造函数,只有裸分配/初始化对。为了进行额外的初始化,实现额外的协议 InitializingBean

    @interface Car : NSObject <Injectable,InitializingBean> 

    -(void) afterPropertiesSet {
        …
    }

并实现必须的 afterPropertiesSet 方法。当对象实例创建时,并且其协作伙伴进行注入和初始化时,将调用此方法。

待办事项

延迟初始化 - 正在进行中。

评论、赞扬、责备

请随时联系我:tomek.cejner at gmail dot com