JSObjectionScopeSingleton在异议框架中被部分打破了吗?

时间:2017-08-09 09:58:04

标签: ios objective-c dependency-injection

的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声明,用户模块创建了自己的相同定义的对象。

2 个答案:

答案 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

此外,我已经向原始存储库创建了拉取请求。