简体   繁体   English

如何使用台风将属性注入基类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM