Когда мое приложение запускается, я извлекаю удаленный файл конфигурации, содержащий информацию (URL-адреса и т. Д.), Необходимые для настройки других зависимостей.Typhoon - Runtime Настраиваемые компоненты с помощью раскадровки
После получения удаленной конфигурации у меня есть объект Config
, который мне нужно передать другим TyphoonDefinition
.
Теперь я также использую интеграцию плагинов plist.
Я изначально шел по пути ввода сборки в ViewController, который загружает объект Config, и когда я получаю удаленный конфиг и создаю объект Config, я бы как-то установил его как свойство на сборке. Я сделал это в надежде, что я мог бы использовать свойство в определениях, но это не сработало, и я получил:
2014-10-22 21:18:06.203 four[39840:516543] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'No component matching id 'setConfig:'.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010a3e63f5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010a07fbb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010a3e632d +[NSException raise:format:] + 205
3 four 0x00000001070a011d -[TyphoonComponentFactory componentForKey:args:] + 148
4 CoreFoundation 0x000000010a2de22c __invoking___ + 140
5 CoreFoundation 0x000000010a2de082 -[NSInvocation invoke] + 290
6 CoreFoundation 0x000000010a36d456 -[NSInvocation invokeWithTarget:] + 54
7 four 0x000000010709d358 -[TyphoonBlockComponentFactory forwardInvocation:] + 276
Есть ли способ для меня, чтобы ввести объект в сборку во время выполнения?
Есть ли более чистый способ делать то, что я пытаюсь сделать?
Я читал о временных аргументах, которые звучат так, как мне нужно, но я действительно не понимаю документы.
Например, у меня это определение. Мне нужно передать объект конфигурации времени выполнения в качестве параметра конструктору.
- (id<ApiService>)apiService
{
return [TyphoonDefinition withClass:[ApiService class] configuration:^(TyphoonDefinition* definition) {}];
}
Спасибо за ответ. Я предполагаю, что я не совсем понимаю аргументы времени исполнения, так как вы предоставляете аргумент. Я вставляю сборку, а затем вызываю метод для ввода аргумента? Кроме того, вам нужно только вызвать его один раз, а затем все инъекции после этого будут содержать обновленную зависимость? – Steve
Это решение не использует аргументы времени исполнения. Он использует так называемый заводский компонент. Нажмите ссылку на темы в файле Readme этого приложения для тайфуна: https://github.com/typhoon-framework/Typhoon-example –
https://github.com/typhoon-framework/Typhoon-example/blob/master/PocketForecast /Assembly/PFThemeAssembly.m –