providersindex.ts只有两个export:context-ids.ts是一些参数常量。exportconstLANGUAGE_CONTEXT_ID='language';exportconstCURRENCY_CONTEXT_ID='currency';exportconstBASE_SITE_CONTEXT_ID='baseSite';exportconstTHEME_CONTEXT_ID='theme';context-service-map.ts(ContextServiceMap)ContextServiceMapkey是一个map结构,String,value是这个站点上下文对应的SiteContextFacade类?比如我们之前在facade文件夹中讨论的:@Injectable()exportclassCurrencyServiceimplementsSiteContext{constructor(protectedstore:Store,protectedconfig:SiteContextConfig){}serviceMapFactory工厂函数,负责提供ContextServiceMap完成?什么时候调用ContextServiceMap的实例?这里只有类的定义,没有类的实例化过程:site-context-params-providers(siteContextParamsProviders)这个类不是index.ts导出的。从评论中也可以看出这是有意为之,并不是为了暴露给公共API。从'@angular/core'导入{Provider};从'@angular/router'导入{UrlSerializer};从'../services/site-context-params.service'导入{SiteContextParamsService};从'导入{SiteContextUrlSerializer}../services/site-context-url-serializer';//以下函数不应在公共API中公开:exportconstsiteContextParamsProviders:Provider[]=[SiteContextParamsService,SiteContextUrlSerializer,{provide:UrlSerializer,useExisting:SiteContextUrl,]Serializer};提供一些provider的实现,SiteContextUrlSerializer提供了AngularUrlSerializer的实现。函数context-service-providers.tsinitializeContext是一个wrapper函数,从site-context级别的config文件夹中导入site-context内部service文件夹中的ConfigInitializerService和SiteContextRoutesHandler,然后调用这两个import方法对应的函数。回答两个问题:(1)什么时候调用initializeContext函数?这个呼吁分为两个维度来讨论。第13行的代码,在Angular依赖注入框架内执行:这是有道理的,因为就在这个文件的末尾,initializeContext被称为APP_INITIALIZER。后来AngularAPP_INITIALIZER的所有provider也调用了:(2)这个函数的23行init方法执行了什么逻辑?这个init方法是通过url中包含的语言和货币参数来设置站点上下文的过程。总结本文介绍SAP电商云SpartacusUIsite-context模块providers文件夹中的实现细节。