I have class structure such as:
class BaseNetworkClient: NSObject {
var defaultParametersBuilder: DefaultParametersBuilder!
}
class NetworkClient: BaseNetworkClient {
}
class DefaultParametersBuilder: NSObject {
}
And Typhoon Assembly
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 doesn't inject to any class but NetworkClient inherits from it. The problem is I can't inject any property to BaseNetworkClient. Properties are always nil. What's wrong?
Abstract and Base Definitions are described in the project wiki: https://github.com/appsquickly/Typhoon/wiki/Types-of-Injections#abstract-and-base-definitions
To inherit an injection you need to set parent for definition:
definition.parent = self.baseNetworkClient()
Assembly will change as follow:
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
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.