的AppModule:
[self bindBlock:^id(JSObjectionInjector *context) {
return [[SystemDataRepository alloc] initWithAppComponent:context];
} toProtocol:@protocol(SystemRepository) inScope:JSObjectionScopeSingleton];
创建用户模块:
JSObjectionInjector *userComponent = [appComponent withModule:[[UserModule alloc] initWithUserId:userId]];
不考虑app模块中的JSObjectionScopeSingleton声明,用户模块创建了自己的相同定义的对象。
答案 0 :(得分:0)
正如下面的主题所指出的那样,它在cocoapods 1.6中出现了问题。
线程告诉它现在修复了cocoapds 1.6.1版本:
https://github.com/atomicobject/objection/releases/tag/1.6.1
检查以下主题以供参考:
inScope:JSObjectionScopeSingleton doesn't work since Cocoapods version 1.6
答案 1 :(得分:0)
发现 withModule 方法始终会创建进样器的副本。
为避免此类行为,需要将另一个模块创建为独立模块:
etText.addTextChangedListener(object : TextWatcher{
override fun afterTextChanged(p0: Editable?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
但在这种情况下,此模块将无法访问其他模块绑定。
幸运的是,框架具有全局上下文以保持所有模块的绑定。 不幸的是,这个功能在1.6.1中被打破了
我在这里创建了固定版本:https://github.com/AlexeyPoldeo/objection/tree/develop/Source
此外,我已经向原始存储库创建了拉取请求。