[英]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 SideMenuTableView: UITableViewController {
var settings: Settings? // Injected property
// Other code
}
謝謝!
為了使它生效,我放棄了與Objective-C兼容的Typhoon版本,並在其網站上切換到了“純快速” Typhoon版本。 設置工作更多,但代碼最終得到了簡化:
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.