2016-11-08 45 views
1

我開始使用iOS上的DI容器和我沒有想法如何在這種情況下,注入性:颱風注入性到一個新的對象

試想一下,我們有:

Assembly.m

- (ClassA *)classA { 
    return [TyphoonDefinition withClass:[ClassA class] configuration:^(TyphoonDefinition *definition) { 
     [definition injectProperty:@selector(url) with:@"http://inject:URL"]; 
    }]; 
} 

和兩個班

ClassA的

@interface ClassA : NSObject 
@property (nonatomic,readwrite) NSString *url; 
@end 

ClassB的

@interface ClassB : ClassA 
@end 

而且

ViewController.m

@interface ViewController() 
@end 

@implementation ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ClassB *cB = [ClassB new]; 
    NSLog(@"%@",cB.url); 
} 

我想,我創建的ClassB的新的對象,所有的對象有注射來自我的DI容器的url屬性r(assembly) 是的,我可以添加屬性到我的ViewController和這個注入工作正常,但我需要注入屬性到新的對象。

也許我不明白所有的原則,但我應該問。 Thx

回答

1

試試這個。

- (id)classAObject{ 
    return [TyphoonDefinition withClass:[ClassA class] 
          configuration:^(TyphoonDefinition *definition){ 
           [definition injectProperty:@selector(url) with:@"http://inject:URL"]; 
          }]; 
} 

- (id)classBObject{ 
    return [TyphoonDefinition withParent:[self classAObject] class:[ClassB class]]; 
} 

KSTTestAssembly *assembly = [[KSTTestAssembly alloc] init]; 
[assembly activate]; 

id classB = [assembly classBObject]; 

自舉颱風

可以引導颱風,並保持對它的引用,通常在AppDelegate中。在應用程序的其他部分,我們不希望直接獲取颱風的實例:

  • 我們連接我們的應用程序直接在臺風
  • 這不是依賴注入,難以測試等

所以我們做的卻是什麼:

  • 注入組件(或組件之一,在一個模塊化的建立),到這裏我們需要它的類。一旦裝配被激活,這實際上將作爲裝配的一個實例TyphoonComponentFactory

  • 它將作爲發射構建的對象圖的工廠。

  • 颱風的默認範圍是ObjectGraph。所以,我們不會在內存中放置任何物體 - 只是用於構建它們的食譜。對象圖只是在我們需要的時候實例化。
  • 通過這種方式,我們可以從一個對象圖有效地進行處理,並以鬆散耦合的方式進行處理。

實施例:

- (RootViewController *)rootController 
{ 
    return [TyphoonDefinition withClass:[RootViewController class] 
    configuration:^(TyphoonDefinition* definition) { 
     [definition injectProperty:@selector(assembly)]; 
    }]; 
} 

documentation for this feature is here

故事板:

如果你喜歡用故事板和Objective-C,你可以use auto-injection macros on your view controllers

+0

是的,它的意義和它的工作,但我不喜歡總是從大會得到這個對象。這種情況下依賴注入的工作在哪裏? –

+0

@ dev.nikolaz你爲什麼不喜歡它?使用程序集(IoC容器)獲取某個對象是可以的。所以DI是一種注入依賴關係的機制(對於屬性依賴關係),它使用IoC容器來保存配置設置。 –

+0

是的你是對的,這是配置設置)),在這一刻這正確回答。大thx! –

相關問題