2015-08-21 4 views
1

Я использую Typhoon для инъекций зависимостей в Swift для iOS.Используя Typhoon, создайте экземпляр подкласса класса, который имеет зависимости

Я создал сборку впрыснуть зависимости в классе под названием BaseRequest так:

public class NetworkAssembly: TyphoonAssembly { 
    public dynamic func baseRequest() -> AnyObject { 
     return TyphoonDefinition.withClass(BaseRequest.self){ 
      (definition) in 
      definition.useInitializer("initWithRetryCount:userUmbrella:networkQueueManager:"){ 
       (initializer) in 

       initializer.injectParameterWith((TyphoonConfig("network.request.retry.count") as! NSNumber).integerValue) 
       initializer.injectParameterWith(self.coreComponents.userUmbrella()) 
       initializer.injectParameterWith(self.networkQueueManager()) 

      } 
     } 
    } 
} 

Теперь я пытаюсь создать подкласс BaseRequest с заводским способом, как это:

class DownloadLibrariesRequest: BaseRequest { 
    var libraries:Array<String> = [] 

    class func downloadLibraries(libraries:Array<String>)->Void{ 
     let request: DownloadLibrariesRequest = DownloadLibrariesRequest(.....) 
     request.libraries = libraries 
    } 
} 

мне нужно, чтобы иметь возможность создать экземпляр DownloadLibrariesRequest и вызвать NetworkAssembly для BaseRequest, так как мне нужно использовать другой init в подклассах. Кроме того, я должен упомянуть, что у меня будет около 50 таких подклассов, поэтому создание сборок для всех из них в настоящий момент не слишком велико.

+0

DI звучит как ужасная работа для сомнительной выгоды. Почему бы не воспользоваться встроенными языковыми функциями Swift, такими как протоколы, дженерики и ограниченные расширения? – mattt

+0

Это не должно быть много работы, а не действительно, если вы используете хотя бы третью сторону. Основное преимущество для меня - более развязанный код, который делает гораздо более четкий код для крупных проектов. В качестве недостатка мне кажется, что гораздо сложнее отладить такой код. – Fervus

+0

Слишком много уровней косвенности затрудняют рассуждения, что особенно важно в большой базе кода. Существует также стоимость исполнения для такого рода абстракции. Я настоятельно рекомендую вам взглянуть на некоторые из сессий Swift из WWDC в этом году, чтобы лучше понять новые и существующие функции языка. – mattt

ответ

0

Чтобы создать определение с общей конфигурацией, чтобы избежать повторения, используйте функцию parent.

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