这个 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相关推荐

  1. SAP Spartacus Popover Directive 构造函数的用途分析

    该构造函数位于文件 popover.directive.ts 里: 第 11 行 cxPopOver Directive 施加到 button 元素上之后,运行时,cxPopOver Directiv ...

  2. SAP Spartacus 用户请求中的 current id 是从哪里来的

    从 SAP Spartacus 成功登录之后,能在 Local Storage 里观察到 userId 为 current: 这个 current id 从哪里来的呢?在 Spartacus 应用初始 ...

  3. SAP Spartacus 中的依赖注入 Dependency Injection 介绍

    先了解 Angular 中的依赖注入 依赖项是指某个类执行其功能所需的服务或对象.依赖项注入(DI)是一种设计模式,在这种设计模式中,类会从外部源请求依赖项而不是让类自己来创建它们. Angular ...

  4. rxjs的map和switchMap在SAP Spartacus中的应用 -将高阶Observable进行flatten操作

    switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...

  5. 使用outlet在SAP Spartacus中添加自定义UI

    outlet 或者在SAP Spartacus中硬编码,或者通过CMS driven. Angular里添加自定义UI的原理是基于TemplateRef, 通过ng-template Componen ...

  6. SAP Spartacus Session affinity

    参见这个讨论. 后端运行在多个 pods/节点时,当子序列请求过早进入时,后端将无法跨集群发送缓存失效请求.此外,如果多个请求分散在多个节点上,则会消耗延迟和不必要的资源. 对于单个客户端,Spart ...

  7. SAP Spartacus 4.0 的技术变化

    在您迁移到 4.0 版库之前,我们强烈建议您切换到新的应用程序结构和新的功能库. 在多个小步骤中进行迁移更容易(迁移到新的应用程序结构,切换到提取的功能库,然后迁移到 4.0),您可以确保在每一步之后 ...

  8. SAP Spartacus travis ci-scripts 下面 e2e-cypress.sh 的实现分析

    文件地址:https://github.com/SAP/spartacus/blob/develop/.travis.yml 里面引用到了 e2e-cypress.sh: https://github ...

  9. 关于 SAP Spartacus Loader Meta Reducer 的用途 - loading 在 true 和 false之前切换的逻辑

    为了给用户更好的反馈,基于他们的行为,我们经常需要保留诸如"正在加载购物车"."获取用户地址失败"等信息. 对于每个单独的应用程序状态,我们必须将元数据放在旁边 ...

最新文章

  1. Mac中使用svn命令行更换svn服务器IP地址
  2. mysql数据库优化大全_MySQL数据库优化技巧大全
  3. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  4. POJ 1287 Prim算法模板
  5. 图像分类任务中的tricks总结
  6. bat调用ant_bat调用ant_Ant调用批处理文件编译VS2005程序
  7. Hadoop中的一些基本操作
  8. 医院药库管理系统 v6.26 下载
  9. Oracle官方PLSQL学习网址
  10. PrintShield打印监控系统
  11. iOS -- 播放本地音频文件 (Swift)
  12. 深度学习框架之Keras入门教程
  13. 怎么建立设备管理系统?
  14. 电脑蓝屏个人解决办法————由程序引起的
  15. 文件查重删除,继续完善及修改上篇内容
  16. 如何在Linux系统服务器中重命名目录
  17. 362 敲击计数器
  18. 亚马逊、速卖通旺季如何结合测评打造爆款listing相关性
  19. 计算机是怎样运行的:从根儿上理解计算机
  20. Python用Tkinter实现日期计算器

热门文章

  1. cisco 2960-24 配置(生产环境)
  2. Unity3D对apk反编译、重编译、重签名
  3. 我的Java后端书架
  4. 编译php源码错误集与解决
  5. 判断一个数是否是2的平方
  6. 答疑:有关一例EXT3文件系统故障
  7. ASP+MSSQL注入工具 web版 beta 3 final release
  8. Day-4: Python函数
  9. Json-server 创建模拟API服务器
  10. 448. Find All Numbers Disappeared in an Array