我有一个使用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
}
谢谢!
答案 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()