Я рекомендую использовать метод обратного вызова typhoonDidInject
typhoonDidInject() -> Void {
myObject.delegate = self;
}
или, если вы не хотите связываться напрямую с Typhoon, укажите в сборке пользовательскую:
definition.performAfterInjections("someMethod")
Я не могу придумать более аккуратного способа соединить все это в сборке, однако, если вы хотите предложить, как это должно выглядеть, мы можем это реализовать.
Изменить:
Если вы хотите подключить все это к Typhoon, вы можете предоставить что-то вроде:
- (UIViewController *)someViewController
{
return [TyphoonDefinition withClass:[FoobarViewController class]
configuration:^(TyphoonDefinition *definition) {
[definition injectProperty:@selector(machine)
with:[self spaghettiMachine]];
[definition performAfterInjections:@selector(injectSpaghettiMachine:with:)
parameters:^(TyphoonMethod *method) {
[method injectParameterWith:[self spaghettiMachine]];
//This will be the same object for any scope except 'Prototype'
[method injectParameterWith:[self someViewController]];
}];
}];
}
- (SpaghettiMachine *)spaghettiMachine
{
return [TyphoonDefinition withClass:[SpaghettiMachine class]
configuration:^(TyphoonDefinition *definition) {
definition.scope = TyphoonScopeWeakSingleton;
}];
}
Но для этого все равно потребуется, чтобы каждый из ваших контроллеров представления реализовал метод, например:
- (void)injectSpaghettiMachine:(SpaghettiMachine *)machine
with:(id)delegate
{
machine.delegate = self;
}
. . вышеизложенное может быть полезно, если контроллеры имеют общий базовый класс.
person
Jasper Blues
schedule
08.05.2015