台风不会注入普通的 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()
我有一个使用 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()