1

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?

}

这种方法是错误的吗?

4

1 回答 1

1

目前可以将简单对象内联注入到初始化程序、属性或方法中。

目前不可能声明一个返回简单对象的方法,并让该方法参与程序集。原因是:

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

放宽要求所有组装方法返回 TyphoonDefinition 的规则很简单。这将允许将此类方法返回的对象作为其他定义中的依赖项注入,记住它不会参与 Typhoon 的作用域池。

将这样的实例自动注册到容器中也是可能的,尽管涉及更多。有必要就此类对象具有的隐式范围达成一致。

于 2015-02-04T16:54:53.723 回答