Angular 迁移到micro结构后,没有动态创建组件的提供程序

Angular 迁移到micro结构后,没有动态创建组件的提供程序,angular,dependency-injection,micro-frontend,Angular,Dependency Injection,Micro Frontend,堆栈太复杂,无法重新创建,因此请提前原谅我并询问我更多信息 Angular应用程序具有以下结构: @NgModule({ 进口:[ 共享模块 ], 声明:[ //这两个组件共享相同的状态 //在ServiceFoo。 //ParentComponent将调用ModalService //渲染DynamicallyRenderedComponent的步骤 //进入模态。 父组件, 动态相关组件 ], 供应商:[ ServiceFoo ] }) 导出类FeatureModule{}//此模块是延迟加

堆栈太复杂,无法重新创建,因此请提前原谅我并询问我更多信息

Angular应用程序具有以下结构:

@NgModule({
进口:[
共享模块
],
声明:[
//这两个组件共享相同的状态
//在ServiceFoo。
//ParentComponent将调用ModalService
//渲染DynamicallyRenderedComponent的步骤
//进入模态。
父组件,
动态相关组件
],
供应商:[
ServiceFoo
]
})
导出类FeatureModule{}//此模块是延迟加载的
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@NGD模块({
进口:[
叠加模
],
声明:[
//使用ViewContainerRef托管组件
//和组件工厂分解器
主机组件
],
供应商:[
//显示模式(主机组件)并传入
//要在模式中显示的组件
ModalService
]
})
导出类SharedModule{}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
//当然,在顶部有一个AppModule,它包含所有
在我将客户端移动到React应用程序下之前,这个设置一直工作得很好,React应用程序是一个容器应用程序,承载其他应用程序(微型前端)。容器应用程序将加载NG客户端的脚本,并在React应用程序中引导应用程序

除了动态渲染组件的依赖项注入之外,其他一切都正常工作。他们停止访问模块中声明的服务,因此抛出了一个臭名昭著的错误:

react_devtools_backend.js:2560 NullInjectorError: R3InjectorError(AppModule)[ServiceFoo -> ServiceFoo -> ServiceFoo]: 
  NullInjectorError: No provider for ServiceFoo!
    at NullInjector.get (core.js:1013)
    at R3Injector.get (core.js:11122)
    at R3Injector.get (core.js:11122)
    at R3Injector.get (core.js:11122)
    at NgModuleRef$1.get (core.js:24243)
    at Object.get (core.js:22142)
    at getOrCreateInjectable (core.js:4079)
    at ɵɵdirectiveInject (core.js:14651)
    at NodeInjectorFactory.ParentComponent [as factory] (ɵfac.js? [sm]:1)
    at getNodeInjectable (core.js:4184)

提前感谢您的时间

问题在于我为Angular应用程序进行引导的方式

错误的方法:

从'@angular/elements'导入{createCustomElement};
@NgModule({….})
导出类AppModule实现DoBootstrap{
构造函数(专用注入器:注入器,专用路由器:路由器){
const micro=createCustomElement(主组件,{injector:this.injector});
customElements.define(appContainer,micro);
}
ngDoBootstrap():void{
this.router.initialNavigation();
}
}
正确的方法:

@NgModule({….})
导出类AppModule实现DoBootstrap{
构造函数(专用路由器:路由器){}
ngDoBootstrap(appRef:ApplicationRef):无效{
this.router.initialNavigation();
appRef.bootstrap(主组件、appContainer);
}
}

*
appContainer
是一个自定义元素,在检查NgModuleRef时,它将承载micro front

,如果在我的FeatureModule中的任何位置,它表示我的实例就是AppModule。由于某种原因,它设置了错误的引用,或者在过程中丢失了它。因此,ComponentFactoryResolver无法提供正确的喷油器