-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC]: trigger 实现机制存在的问题 #146
Comments
内置实现有必要,描述出现的问题其实是在当前的基于 scan 的加载机制下的
即普通的无自定义 loader 的文件其实需要最先加载,保证 container 在启动期的预先完备性。 生命周期实际上也是 |
trigger的设计和实现,是有一定的问题的。现在上层插件是通过“设置相同的id”来获取trigger实例,而不是通过明确trigger class来获取。 这就导致的结果就是:仅通过id + 加载流程时序问题没处理好,拿到的到底是哪个trigger肯定会出问题。 |
内置类靠 id 覆盖我觉得没有什么太大问题,这给了上层一些灵活性,只是基于 Scan 的机制下,用户逻辑介入前 global container 的完备性变成了启动期的一个隐含前置条件,目前的 |
修改启动步骤,仍然解决不了我上面描述的问题,仍会存在一定阶段拿到的 trigger 是不同实例的值 |
可以解决,module 加载完毕后,这些 id 覆盖的过程都结束了,container 里面是最终结果,此时开始生命周期处理并不会有问题 |
那就是调整后的生命周期流程是 didLoad -> configWillLoad -> configDidLoad -> willReady -> didReady |
对,实际上基于 Scan 的机制,文件载入 container 是需要前置的,并且这个过程并不依赖 config |
get |
@hyj1991 @JerrysShan 有关 lifecycle 这块,当前阶段的结论是订正成 didLoad -> configWillLoad -> configDidLoad -> willReady -> didReady 这样吗? |
我认为这样是合理的,主要的理由是 scan 机制下 global container 的完备性变成了一个前提(依赖), |
@hyj1991 我爬楼看历史消息,看起来当前也是满足要求的,我问这个问题的原因是要准备演讲文稿,而 lifecycle 是咱们这次很看重的一个概念,协议实现现在也是基于 lifecycle 和 plugin 机制去实现的,想确定一个版本 😄。 |
这一点上我持保留意见,这涉及 didLoad 的语义调整,之前是指(全部)加载完成,调整后存在歧义和使用错误的风险(Config 未加载,依赖 @config 的类如被实例化使用将报错),Config 也应当是 Global Container 完备的必要条件 另外,对应的,各插件的实例化行为也需要调整到 configDidLoad,这不科学 |
@noahziheng 这里应该是“文件加载完成”,而 didLoad 的感觉是全部都加载完成了对吗? |
可以增加一个 |
我的本意并非一定要更改 |
6f79b40 已经解决此问题,调整顺序后 |
现在 core 中提供了trigger 机制,有个默认实现,上层如果有自定义的需求可以实现覆盖,现在的覆盖机制存在一定的问题:
因为覆盖机制在
didLoad
阶段生效,假如在configDidLoad
阶段,我添加了自定义中间件,会发现中间件应用到了 core 中 default trigger ,而不是 custom trigger ; 在 didload 阶段之后添加的中间件会应用到 custom trigger 中。The text was updated successfully, but these errors were encountered: