Как внедрить свойство в базовый класс с помощью тайфуна

У меня есть структура класса, такая как:

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
    }
}
Другие вопросы по тегам