台风注入参考并初始化它

时间:2015-02-04 16:07:46

标签: ios typhoon

Typhoon中是否有可能在程序集文件中返回一个实例?

我想注入AFHTTPRequestOperationManager的引用,然后设置响应和请求序列化程序。

我想我可以这样做:

- (AFHTTPRequestOperationManager*) httpRequestManager{

    return [TyphoonDefinition withClass:[AFHTTPRequestOperationManager class] configuration:^(TyphoonDefinition * definition){

        [definition useInitializer:@selector(initWithBaseURL:) parameters:^(TyphoonMethod * initializer){

            NSURL * baseURL = [NSURL URLWithString:kPBAuthenticatorBaseURL];
            [initializer injectParameterWith:baseURL];
        }];

        [definition performAfterInjections:@selector(setResponseSerializer:) parameters:^(TyphoonMethod * initializer){}];
        [definition performAfterInjections:@selector(setRequestSerializer:) parameters:^(TyphoonMethod * initializer){}];
    }];

}

没有简单的选项可以返回这样的实例:

- (AFHTTPRequestOperationManager*) httpRequestManager{


    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

   //Do some stuff to register it in the graph object --> HELP?

}

这种方法有误吗?

1 个答案:

答案 0 :(得分:1)

目前可以将一个简单对象内联到初始化器,属性或方法。

目前无法声明返回简单对象的方法,并让它参与程序集。原因是:

  • Typhoon在启动时对装配进行检测,所有方法都会返回TyphoonDefinition。 Typhoon根据方法名称分配一个密钥,并在工厂中注册该定义。
  • 激活后,TyphoonComponentFactory根据定义返回构建的实例。您的装配接口可以在TyphoonComponent工厂前面摆出姿势。请注意,此时已丢弃实际的程序集实现(.m文件的内容),我们只是将接口重用为TyphoonComponentFactory的代理
  • 我们希望通过仅返回定义来鼓励保持程序集简单。

放宽要求所有装配方法返回TyphoonDefinition的规则会很简单。这将允许将这种方法返回的对象注入其他定义中的依赖关系,同时要记住它不会参与Typhoon的范围池。

虽然涉及更多,但也可以在容器中自动注册这样的实例。有必要就这样一个对象所具有的隐含范围达成一致。