什么是 SAP Spartacus FacadeFactoryService 中的 Resolver
这个 resolver 只针对 Proxy Facade,根据 feature 名称和 FacadeClass,获取对应的 resolver. 该 resolver 知道怎样将函数调用,投递到该 facade 的具体实现类去。
featureName:cartQuickOrderCore
最后得到实际值:cartQuickOrder
返回 resolver 的逻辑放在一个 defer 函数块里了:
当应用程序开始调用 facade 的方法时,被投递到代理类:
此时 resolver$ 包含的一大段在 defer 里的逻辑始终未得到执行。
所以,从语义上说,resolver 解析出来的对象,就是该 facade 真实的实现类?这个 connect 应该相当于 subscribe 方法。
果然,connect 方法会触发 defer 块内的函数调用:
触发 core module 延迟加载:
加载完 QuickOrderModule 之后,从 ModuleRef 里拿到 injector,再调用这个 module 的 injector,拿到 facadeClass 对应的实现类:
大功告成,拿到实现类 QuickOrderService 了:
此时就可以调用该实现类的方法了:
总结
Resolver 负责触发 Proxy Facade 对应的具体实现类的延迟加载,加载完成后,从 Module Ref 里拿到 injector,再使用 injector 拿到 Proxy Facade 的具体实现类的实例。
更多Jerry的原创文章,尽在:“汪子熙”:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver相关推荐
- SAP Spartacus Popover Directive 构造函数的用途分析
该构造函数位于文件 popover.directive.ts 里: 第 11 行 cxPopOver Directive 施加到 button 元素上之后,运行时,cxPopOver Directiv ...
- SAP Spartacus 用户请求中的 current id 是从哪里来的
从 SAP Spartacus 成功登录之后,能在 Local Storage 里观察到 userId 为 current: 这个 current id 从哪里来的呢?在 Spartacus 应用初始 ...
- SAP Spartacus 中的依赖注入 Dependency Injection 介绍
先了解 Angular 中的依赖注入 依赖项是指某个类执行其功能所需的服务或对象.依赖项注入(DI)是一种设计模式,在这种设计模式中,类会从外部源请求依赖项而不是让类自己来创建它们. Angular ...
- rxjs的map和switchMap在SAP Spartacus中的应用 -将高阶Observable进行flatten操作
switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...
- 使用outlet在SAP Spartacus中添加自定义UI
outlet 或者在SAP Spartacus中硬编码,或者通过CMS driven. Angular里添加自定义UI的原理是基于TemplateRef, 通过ng-template Componen ...
- SAP Spartacus Session affinity
参见这个讨论. 后端运行在多个 pods/节点时,当子序列请求过早进入时,后端将无法跨集群发送缓存失效请求.此外,如果多个请求分散在多个节点上,则会消耗延迟和不必要的资源. 对于单个客户端,Spart ...
- SAP Spartacus 4.0 的技术变化
在您迁移到 4.0 版库之前,我们强烈建议您切换到新的应用程序结构和新的功能库. 在多个小步骤中进行迁移更容易(迁移到新的应用程序结构,切换到提取的功能库,然后迁移到 4.0),您可以确保在每一步之后 ...
- SAP Spartacus travis ci-scripts 下面 e2e-cypress.sh 的实现分析
文件地址:https://github.com/SAP/spartacus/blob/develop/.travis.yml 里面引用到了 e2e-cypress.sh: https://github ...
- 关于 SAP Spartacus Loader Meta Reducer 的用途 - loading 在 true 和 false之前切换的逻辑
为了给用户更好的反馈,基于他们的行为,我们经常需要保留诸如"正在加载购物车"."获取用户地址失败"等信息. 对于每个单独的应用程序状态,我们必须将元数据放在旁边 ...
最新文章
- Mac中使用svn命令行更换svn服务器IP地址
- mysql数据库优化大全_MySQL数据库优化技巧大全
- JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
- POJ 1287 Prim算法模板
- 图像分类任务中的tricks总结
- bat调用ant_bat调用ant_Ant调用批处理文件编译VS2005程序
- Hadoop中的一些基本操作
- 医院药库管理系统 v6.26 下载
- Oracle官方PLSQL学习网址
- PrintShield打印监控系统
- iOS -- 播放本地音频文件 (Swift)
- 深度学习框架之Keras入门教程
- 怎么建立设备管理系统?
- 电脑蓝屏个人解决办法————由程序引起的
- 文件查重删除,继续完善及修改上篇内容
- 如何在Linux系统服务器中重命名目录
- 362 敲击计数器
- 亚马逊、速卖通旺季如何结合测评打造爆款listing相关性
- 计算机是怎样运行的:从根儿上理解计算机
- Python用Tkinter实现日期计算器