Injective 0.2.2

Injective 0.2.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新版本2014年12月

未命名 维护。



Injective 0.2.2

  • 作者
  • 弗拉基米尔·波赞诺夫

Injective 框架

此框架的目的是为 iOS/Mac 应用提供简单的依赖注入框架。

Injective 提供了通过解析属性依赖来自动连接类实例的机制。此外,Injective 确保所有必要的数据都传送给实例,使其能正确运行。

Injective 支持类似工厂的对象创建和单例对象创建。

设置

Git 版本

(仅 Git 用户)将 Injective 添加为子模块

如果您使用 git 作为项目的 Source Control Manager,请将 Injective 添加为子模块

git submodule add https://github.com/farcaller/Injective

(其他用户)下载 Injective 源代码

https://github.com/farcaller/Injective/zipball/master 下载 Injective 源代码,并将其解压缩到项目的根目录。

将 Injective 项目添加到您的工作区

将 Injective 项目添加到 Project Navigator(如果您还没有工作区,这将会创建一个新的工作区)。为此,从 Finder 拖动 Injective.xcodeproj 到项目导航器面板的最底部。

如果您还没有工作区,系统会提示您:“您想要将此项目保存到新的工作区中吗?”。保存它。

将公共头文件添加到搜索路径

打开项目的构建设置,并将 Injective/Headers 添加到 头文件搜索路径。如果您按照步骤 0 操作,那么只需将 $(PROJECT_DIR)/Injective/Injective/Headers 添加进去即可

(可选)将 Injective 添加为全局头文件

将以下行添加到项目的预编译头文件(pch 文件)中:#import "InjectiveContext.h"

#import "IJContext.h"

这将允许您使用 Injective 而无需在每个地方都需要 #import。

预编译版本

存在一个目标来构建Injective.framework,然而当前并没有稳定的版本发布。预编译的构建将在以后添加,目前建议您使用最近的git检出版本。

使用方法

配置默认上下文

所有辅助工具都需要设置一个全局上下文。您可以使用以下方式指定一个:

IJContext *defaultContext = [[IJContext alloc] init];
[IJContext setDefaultContext:defaultContext];

在哪里做?尽 earliest。您可以在iOS项目中使用应用程序代理中的-application:didFinishLaunchingWithOptions:

注册单例类

要注册一个类,您需要使用IJContext类的+registerClass:instantinationMode:方法

IJContext *myContext = [[IJContext alloc] init];
[myContext registerClass:[MyAPIController class]
      instantinationMode:IJContextInstantinationModeSingleton];

然后,您可以使用以下代码获取该类的实例

MyAPIController *api = [myContext instantinateClass:[MyAPIController class]
                                     withProperties:nil];

注意:您也可以在您的类实现中使用injective_register_singleton宏

@implementation MyAPIController

injective_register_singleton(MyAPIController)

...

@end

注册公共类

您可以使用IJContextInstantinationModeFactory注册一个公共类。这样,Injective将在每次实例化它时创建该类的新实例

IJContext *myContext = [[IJContext alloc] init];
[myContext
 registerClass:[MyDetailViewController class]
 instantinationMode:IJContextInstantinationModeFactory];

在此模式下,您可以传递将被KVC映射的额外属性

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
                   items, @"items",
                   nil];
MyDetailViewController *viewController = [myContext
                                          instantinateClass:[MyDetailViewController class] 
                                          withProperties:d];

注意:您也可以在您的类实现中使用injective_register宏

@implementation MyDetailViewController

injective_register(MyDetailViewController)

...

@end

指定依赖项

为了使Injective真正有用,您需要指定您类所需的属性集。您可以通过+injective_requredProperties方法来完成此操作

@interface MyDetailViewController : UIViewController

@property (nonatomic, strong) MyAPIController *apiController;

@end


@implementation MyDetailViewController

injective_register(MyDetailViewController)

+ (NSSet *)injective_requredProperties
{
    return [NSSet setWithObject:@"apiController"];
}

@end

还有一个方便的宏供您使用 -- injective_requires,它执行相同的任务

@implementation MyDetailViewController

injective_register(MyDetailViewController)
injective_requires(@"apiController")

@end

实例化辅助工具

您可以使用以下NSObject的分类方法在默认上下文中实例化任何对象

MyDetailViewController *viewController = [MyDetailViewController injectiveInstantiate];

许可

Injective是一个MIT许可的框架。请在LICENSE文件中查看详细信息。

致谢

Flattr this git repo

endorse

Injective框架最初由Vladimir "Farcaller" Pouzanov编写 <[email protected]>.

一些想法基于Objection框架(https://github.com/atomicobject/objection)。

错误/建议

我总是开放接受沟通。请通过github issues系统提交问题https://github.com/farcaller/Injective/issues/new