[英]How to inject property to base class using Typhoon
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. BaseNetworkClient不会注入任何类,但是NetworkClient会继承它。 The problem is I can't inject any property to BaseNetworkClient. 问题是我无法将任何属性注入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 项目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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.