Я использую 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 таких подклассов, поэтому создание сборок для всех из них в настоящий момент не слишком велико.
DI звучит как ужасная работа для сомнительной выгоды. Почему бы не воспользоваться встроенными языковыми функциями Swift, такими как протоколы, дженерики и ограниченные расширения? – mattt
Это не должно быть много работы, а не действительно, если вы используете хотя бы третью сторону. Основное преимущество для меня - более развязанный код, который делает гораздо более четкий код для крупных проектов. В качестве недостатка мне кажется, что гораздо сложнее отладить такой код. – Fervus
Слишком много уровней косвенности затрудняют рассуждения, что особенно важно в большой базе кода. Существует также стоимость исполнения для такого рода абстракции. Я настоятельно рекомендую вам взглянуть на некоторые из сессий Swift из WWDC в этом году, чтобы лучше понять новые и существующие функции языка. – mattt