Angular 10 中重复的 ApiModule

Duplicated ApiModule in Angular 10

我对 Swagger 生成的 ApiModule 有问题,我只在我的 AppModule 中提供了一次,但不知何故它被创建了两次,所以由于构造函数守卫,应用程序没有启动:

export class ApiModule {
    public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders {
        return {
            ngModule: ApiModule,
            providers: [ { provide: Configuration, useFactory: configurationFactory } ]
        };
    }

    constructor( @Optional() @SkipSelf() parentModule: ApiModule,
                 @Optional() http: HttpClient) {
        if (parentModule) {
            throw new Error('ApiModule is already loaded. Import in your base AppModule only.');
        }
        if (!http) {
            throw new Error('You need to import the HttpClientModule in your AppModule! \n' +
            'See also https://github.com/angular/angular/issues/20575');
        }
    }
}

这似乎是由最近更改的功能模块引起的,如果我从导入数组中删除该模块,它会像以前一样正常工作。这个特性模块是急切加载的,其余的是路由懒加载。

我花了几天时间检查进口和供应商,看起来不错。我也尝试调试它并在堆栈中发现模块构造函数被调用两次:1)由一个随机的无关组件(如果我删除该组件另一个引发错误)和 2)由一个包装器模块调用一个懒惰的路由加载的模块。第一次调用导致了问题,因为当我删除有问题的模块时,只有第二次调用发生并且应用程序正常启动。

我一直在 Chrome Dev Tools 中弄乱调试器,以了解为什么 ApiModule 被创建两次,但考虑到 Angular 内部机制,它非常复杂。您能否就如何解决或调试此问题给我一些指导?

提前致谢!

丹妮

您是否检查过未在其他模块的提供者列表中导入的 ApiModule?如果模块定义了 Singleton,将其添加到模块或组件的提供者会导致两次调用; 你可以查看

这可以关闭,我没有注意到的内部库之一提供了 ApiModule :-S

在过去的两年里,这个库的 none 个客户出现了这个问题,但是在引入了一个导入这个库的新模块之后,并且有一些 eager 和其他惰性模块导致了应用程序中的问题。

堆栈跟踪和调试没有帮助找到问题。