2015-08-12 3 views
1

В устаревшем приложении, где я постепенно представляю Typhoon, если я хочу создать экземпляр из Typhoon из класса, который сам не был создан из Typhoon, я могу разместить следующее в своем AppDelegate:Typhoon - Проекты для детей

[self.assembly makeDefault]; 

И определение AppDelegate в моей сборке:

- (AppDelegate *)appDelegate 
{ 
    return [TyphoonDefinition withClass:[PFAppDelegate class] 
     configuration:^(TyphoonDefinition *definition) 
    { 
      [definition injectProperty:@selector(assembly) with:self]; 
    }]; 
} 

в другом месте я могу сделать следующее, чтобы получить экземпляр сборки:

MyAssembly* assembly = [MyAssembly defaultAssembly]; 

Это нормально, но предположим, что мое приложение состоит из следующих действий:

  • Главный проект, содержащий различные дочерние проекты.
  • Главный проект имеет зависимость от iphone от Typhoon, сборка написана здесь и содержит определение объектов, которые должны быть введены в его дочерние проекты.

Поскольку дочерние проекты не знают о главном проекте я не могу #import сборки и использование: MyAssembly* assembly = [MyAssembly defaultAssembly];

Как следует продолжить в этом сценарии?

ответ

1

В типичном приложении Typhoon вы будете иметь:

  • Один экземпляра TyphoonComponentFactory
  • Несколько узлов, разделенные на вас логические архитектурные слои. Эти сборки могут ссылаться друг на друга.

Ассембли содержат синие принты (или рецепты) для создания объектов. При запуске вся эта информация собирается и хранится в TyphoonComponentFactory.

После того, как приложение запущенно, узлы сами по существу отбрасываются, но ваши сборочные интерфейсы все еще могут выступать в качестве фасада в передней части TyphoonComponentFactory - вызовы методы формирования сборочного использование интерфейса пересылки Objective-C и преобразуются в [factory componentForKey].

Поэтому

  • Вы можете бросить TyphoonComponentFactory к любой из ваших монтажных интерфейсов и он будет работать.
  • Вы можете использовать любой из ваших интерфейсов сборки для своих дочерних интерфейсов сборки, и он будет работать.
  • Вы можете применить свои интерфейсы сборки к TyphoonComponentFactory.

Этот совет предполагает, что у вас есть один экземпляр TyphoonComponentFactory. В очень сложном приложении у вас может быть больше: один для движка или библиотеки, например, и один для основного приложения, и эти части не должны знать, что остальные поддерживаются Typhoon. Но если у вас есть набор сборок, которые ссылаются друг на друга и создаются вместе при запуске, чтобы сформировать один TyphoonComponentFactory, вы можете бросить между ними.Просто используйте:

MyChildAssembly *childAssembly = (MyChildAssembly) parentAssembly; 
+0

Я не уверен, что вы поняли мою проблему. У моих дочерних проектов нет Typhoon в качестве зависимости, поэтому они не могут импортировать Typhoon, поэтому я не могу создать сборку в дочернем проекте. Более того, дочерние проекты не знают о главном проекте, чтобы запросить MainAssembly. – fernandospr

+0

А, я вижу. Да, я неправильно понял вашу проблему. Пожалуйста, проигнорируйте этот ответ. –

Смежные вопросы