这个 resolver 只针对 Proxy Facade,根据 feature 名称和 FacadeClass,获取对应的 resolver. 该 resolver 知道怎样将函数调用,投递到该 facade 的具体实现类去。

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

featureName:cartQuickOrderCore

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

最后得到实际值:cartQuickOrder

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

返回 resolver 的逻辑放在一个 defer 函数块里了:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

当应用程序开始调用 facade 的方法时,被投递到代理类:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

此时 resolver$ 包含的一大段在 defer 里的逻辑始终未得到执行。
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

所以,从语义上说,resolver 解析出来的对象,就是该 facade 真实的实现类?这个 connect 应该相当于 subscribe 方法。

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

果然,connect 方法会触发 defer 块内的函数调用:

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

触发 core module 延迟加载:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

加载完 QuickOrderModule 之后,从 ModuleRef 里拿到 injector,再调用这个 module 的 injector,拿到 facadeClass 对应的实现类:

什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

大功告成,拿到实现类 QuickOrderService 了:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

此时就可以调用该实现类的方法了:
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

Resolver 负责触发 Proxy Facade 对应的具体实现类的延迟加载,加载完成后,从 Module Ref 里拿到 injector,再使用 injector 拿到 Proxy Facade 的具体实现类的实例。

更多Jerry的原创文章,尽在:"汪子熙":
什么是 SAP Spartacus FacadeFactoryService 中的 Resolver

相关文章:

  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
  • 2021-06-08
  • 2021-04-14
  • 2022-01-06
  • 2021-11-19
  • 2021-12-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2021-12-03
  • 2021-11-23
  • 2021-11-17
相关资源
相似解决方案