台风不会注入普通的 NSObject 派生 class

Typhoon won't inject into plain NSObject derived class

我有一个使用 Typhoon 的 Swift 3 应用程序,它成功地将一个 NSObject 派生对象注入到 属性 中的几个从 UIViewController 派生的对象中。我添加了代码以将同一对象注入到仅从 NSObject 派生的对象中,并且 属性 在执行该对象中的任何代码时始终为 nil。

我的程序集如下所示:

class CoreComponents: TyphoonAssembly {
dynamic func appInitializer() -> Any {
    return TyphoonDefinition.withClass(AppInitializer.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func sideMenu() -> Any {
    return TyphoonDefinition.withClass(SideMenuTableView.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func mapViewController() -> Any {
    return TyphoonDefinition.withClass(MapViewController.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func provideSettings() -> Any {
    return TyphoonDefinition.withClass(Settings.self) {
        (definition) in
        definition!.scope = TyphoonScope.singleton
    }
}

}

其中只有第一种方法指定的注入失败。它要注入的对象是这样声明的:

class AppInitializer: NSObject {
    var settings: Settings? // Injected property

    // Other code here
}

有人看到我做错了什么吗?

这是注入工作的 class 的相关部分:

class SideMenuTableView: UITableViewController {
    var settings: Settings?  // Injected property
    // Other code
}

谢谢!

为了让它工作,我放弃了 Typhoon 的 Objective-C 兼容版本并切换到 their website 的 Typhoon "pure swift" 版本。设置工作更多,但代码最终得到简化:

class CoreComponents: Assembly {
    func provideSettings() -> Definition {
        return Definition(withClass: Settings.self) { d in
            d.setScope(Definition.Scope.Singletone)
        }
    }
}

class AppInitializer: NSObject {
    let settings = CoreComponents.assembly.provideSettings()
    // More code here
}

这需要使用以下行在我的 AppDelegate 的 "didFinishLaunchingWithOptions" 方法中实例化程序集:

Typhoon.activateAssemblies()