簡體   English   中英

台風不會注入普通的NSObject派生類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM