我创建了一个测试Typhoon框架的项目,我创建了两个类ApplicationAssembly和CoreAssembly,其中我注入了一些属性和构造函数以及一个默认的Configuration.plist来从其中加载数据。
ApplicationAssembly
public class ApplicationAssembly: TyphoonAssembly {
public dynamic func config() -> AnyObject {
return TyphoonDefinition.configDefinitionWithName("Config.plist")
}
}CoreAssembly
public class CoreAssembly: TyphoonAssembly {
public dynamic func apiHandler() -> AnyObject {
return TyphoonDefinition.withClass(ApiHandler.self) {
(definition) in
definition.useInitializer("initWithDebugging:debugProcess:mainURL:") {
(initializer) in
initializer.injectParameterWith(TyphoonConfig("debug_mode"))
initializer.injectParameterWith(TyphoonConfig("debug_path"))
initializer.injectParameterWith(TyphoonConfig("api_url"))
}
definition.scope = TyphoonScope.Singleton
}
}
public dynamic func viewController() -> AnyObject {
return TyphoonDefinition.withClass(ViewController.self) {
(definition) in
definition.injectProperty("apiHandler", with:self.apiHandler())
}
}
}我在我的Info.plist中设置了TyphoonInitialAssemblies,首先是ApplicationAssembly,然后是CoreAssembly。
除了应用程序从未在AppDelegate类中输入或在ViewController类中输入之外,一切都运行良好,没有例外。我不知道,也许我在医生身上漏掉了什么。
我在这里错过了什么?
为什么在调试中不进入ViewController类,这是Storyboard中的初始视图控制器?
发布于 2015-04-22 10:18:46
问题是ApiHandler类没有扩展NSObject,这是必需的。这是因为Typhoon是一个内省依赖注入容器。由于Swift没有自省,所以它使用了目标C运行时。
然而,应用程序不应该以这样一种模糊的方式崩溃。我要让开了个问题看看如何在有意义的错误中失败,而不是无限递归。
在解决了最初的问题后,我还注意到用于ApiHandler的init方法传递一个Swift对象。这需要是一个NSNumber。
init(debugging : NSNumber, debugProcess : String, mainURL : String) {
self.debugging = debugging.boolValue
self.debugProcess = debugProcess
self.mainURL = mainURL
}鉴于Typhoon使用的是目标-C运行时,与Swift一起使用它有几个怪癖--与使用Swift与KVO应用相同的规则。
https://stackoverflow.com/questions/29704835
复制相似问题