2016-05-16 2 views
1

У меня есть структура класса, такие как:Как придать свойство базового класса с помощью Typhoon

class BaseNetworkClient: NSObject { 
    var defaultParametersBuilder: DefaultParametersBuilder! 
} 

class NetworkClient: BaseNetworkClient { 

} 

class DefaultParametersBuilder: NSObject { 

} 

И Typhoon Ассамблея

class CoreComponentsAssembly: TyphoonAssembly { 
    dynamic func baseNetworkClient() -> AnyObject { 
     return TyphoonDefinition.withClass(BaseNetworkClient.self) { 
      (definition) in 
      definition.scope = .ObjectGraph 
      definition.injectProperty(#selector(self.defaultParametersBuilder), with: self.defaultParametersBuilder()) 
     } 
    } 

    dynamic func networkClient() -> AnyObject { 
     return TyphoonDefinition.withClass(NetworkClient.self) { 
      (definition) in 
      definition.scope = .ObjectGraph 
     } 
    } 

    dynamic func defaultParametersBuilder() -> AnyObject { 
     return TyphoonDefinition.withClass(DefaultParametersBuilder.self) { 
      (definition) in 
      definition.scope = .ObjectGraph 
     } 
    } 
} 

BaseNetworkClient не вводить в любой класс, но NetworkClient наследует от него. Проблема в том, что я не могу внедрить какое-либо свойство в BaseNetworkClient. Свойства всегда равны нулю. Что не так?

+1

Попробуйте в networkClient() define.parent = baseNetworkClient() –

+0

https://github.com/appsquickly/Typhoon/wiki/Types-of-Injections#abstract-and-base-defin itions –

+0

Спасибо, ребята! Исправлено. – AlexEdunov

ответ

2

Аннотация и базовые определения описаны в проекте вики: https://github.com/appsquickly/Typhoon/wiki/Types-of-Injections#abstract-and-base-definitions

Чтобы унаследовать инъекции вам нужно установить родитель для определения:

definition.parent = self.baseNetworkClient() 

Ассамблея изменится следующим образом:

dynamic func baseNetworkClient() -> AnyObject { 
    return TyphoonDefinition.withClass(BaseNetworkClient.self) { 
     (definition) in 
     definition.injectProperty(#selector(self.defaultParametersBuilder), with: self.defaultParametersBuilder()) 
    } 
} 

dynamic func networkClient() -> AnyObject { 
    return TyphoonDefinition.withClass(NetworkClient.self) { 
     (definition) in 
     definition.parent = self.baseNetworkClient() 
     definition.scope = .ObjectGraph 
    } 
} 
Смежные вопросы