Как внедрить свойство в базовый класс с помощью тайфуна
У меня есть структура класса, такая как:
class BaseNetworkClient: NSObject {
var defaultParametersBuilder: DefaultParametersBuilder!
}
class NetworkClient: BaseNetworkClient {
}
class DefaultParametersBuilder: NSObject {
}
И тайфун Ассамблеи
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 ответ
Абстрактные и базовые определения описаны в вики проекта: https://github.com/appsquickly/Typhoon/wiki/Types-of-Injections
Чтобы наследовать инъекцию, вам нужно установить parent для определения:
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
}
}