我开始在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;
@endClassB
@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属性的注入--我可以将属性添加到我的ViewController中,而且这个注入工作得很好,但是我需要向新对象注入属性。
也许我不明白所有的原则,但我应该问一问。Thx
发布于 2016-11-08 14:18:33
尝尝这个。
- (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];引导台风
您可以引导Typhoon,并保存对它的引用,通常在AppDelegate中。在应用程序的其他部分,我们不想直接获取Typhoon的实例:
所以我们所做的是:
TyphoonComponentFactory的实例,将其伪装为程序集。ObjectGraph。所以,我们不把任何东西保存在记忆中--只是用来建造它们的食谱。对象图是在我们需要它的时候实例化的。示例:
- (RootViewController *)rootController
{
return [TyphoonDefinition withClass:[RootViewController class]
configuration:^(TyphoonDefinition* definition) {
[definition injectProperty:@selector(assembly)];
}];
}Storyboards:
如果你喜欢使用故事板和目标C,你可以在视图控制器上使用自动注入宏。。
https://stackoverflow.com/questions/40489015
复制相似问题