首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typhoon不会注入普通的NSObject派生类

Typhoon不会注入普通的NSObject派生类
EN

Stack Overflow用户
提问于 2017-01-26 06:55:54
回答 1查看 80关注 0票数 0

我有一个使用Typhoon的Swift 3应用程序,它成功地将NSObject派生的对象注入到从UIViewController派生的几个对象中的一个属性中。我添加了代码,以便将相同的对象注入到仅从NSObject派生的对象中,并且在执行该对象中的任何代码时,该属性始终为空。

我的程序集看起来像这样:

代码语言:javascript
复制
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
    }
}

}

在这种情况下,只有第一个方法指定的注入不能注入。它想要注入的对象声明如下:

代码语言:javascript
复制
class AppInitializer: NSObject {
    var settings: Settings? // Injected property

    // Other code here
}

有没有人看到我做错了什么?

下面是一个类的相关部分,注入可以工作:

代码语言:javascript
复制
class SideMenuTableView: UITableViewController {
    var settings: Settings?  // Injected property
    // Other code
}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 07:30:27

为了让它工作,我放弃了Objective-C兼容版本的台风,并在their website上切换到“纯快速”版本的台风。设置工作更多,但代码最终简化了:

代码语言:javascript
复制
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“方法中用下面这一行实例化程序集:

代码语言:javascript
复制
Typhoon.activateAssemblies()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41863211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档