TBCacaoIOS 0.0.3

TBCacaoIOS 0.0.3

测试已测试
语言语言 Obj-CObjective C
许可 Apache 2
发布最后发布2015年4月

Tae Won Ha 维护。



  • Tae Won Ha

TheobromaCacao — TBCacao

关于

TBCacao 是一个简单小巧的 Cocoa 框架,用于依赖注入。

示例项目

我的其他项目 Qmind —— 兼容 FreeMind 的 OS X 思维导图应用 —— 广泛使用了 TBCacao。看看一个真实示例。

使用方法

首先,通过将其添加为 Framework 或将所有 TBCacao 类复制到您的项目中,将 TBCacao 包含到您的项目中。在您返回之前,将以下行添加到 main.m 中以初始化 TBCacao

[[TBContext sharedContext] initContext];

TBBean

假设我们有以下两个类

  • MyLayoutManager
  • MyDrawingManager

进一步假设您想在 MyDrawingManager 中自动注入(在 Spring 中的语言叫做自动装配)MyLayoutManager。两个类如下所示

MyLayoutManager

@interface MyLayoutManager : NSObject <TBBean>

- (void)doLayout;

@end

@implementation MyLayoutManager

- (void)doLayout {
  NSLog(@"doLayout");
}

@end

MyDrawManager

@interface MyDrawManager : NSObject <TBBean>

@property (weak) MyLayoutManager *layoutManager;

- (void)doDraw;

@end

@implementation MyDrawManager

TB_AUTOWIRE(layoutManager)

- (void)doDraw {
    [self.layoutManager doLayout];
}

@end

TBBean 协议将两个类标记为 bean,以便它们被 TBCacao 扫描。行 TB_AUTOWIRE(layoutManager) 使 TBCacao 自动将 layoutManager 属性设置为 MyLayoutManager 的实例。

TBManualBeanProvider

您通常在类中使用 Foundation、AppKit/UIKit 或其他第三方框架的单例。为了许多目的,将它们注入是有益的,即不调用类似 [SomeManager sharedManager] 的消息。这可以轻松限制您类的能力单元测试。假设您有 MyManager 并且这个类使用 [NSNotificationCenter defaultCenter]。要注入默认的通知中心,您可以这样做

MyManualBeanProvider

@interface MyManualBeanProvider : NSObject <TBManualBeanProvider>
@end

@implementation MyManualBeanProvider

+ (NSArray *)beanContainers {
    static NSArray *manualBeans;

    if (manualBeans == nil) {
        manualBeans = @[
                [TBBeanContainer beanContainerWithBean:[NSNotificationCenter defaultCenter]],
                [TBBeanContainer beanContainerWithBean:[SomeOtherManager sharedManager]],
        ];
    }

    return manualBeans;
}

@end

MyManager

@interface MyManager: NSObject <TBBean>

@property (weak) NSNotificationCenter *notificationCenter;

@end

@implementation MyManager

TB_AUTOWIRE(notificationCenter)

@end

现在,您可以在对 MyManager 的单元测试中轻松模拟通知中心。

由于 TBCacao 会自动扫描所有实现协议 TBManualBeanProvider 的类,您不需要接口文件;将 @interface@implementation 都放在 MyManualBeanProvider.m 中。


待定:描述 TB_MANUALWIRE