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

时间:2017-01-25 22:55:54

标签: ios swift swift3 typhoon

我有一个使用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 SideMenuTableView: UITableViewController {
    var settings: Settings?  // Injected property
    // Other code
}

谢谢!

1 个答案:

答案 0 :(得分:1)

为了实现这一点,我放弃了与Objective-C兼容的Typhoon版本并切换到了纯粹的快速"在their website的台风版本。设置工作更多,但代码最终得到了简化:

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()