2017-08-12 114 views
1

的技术堆栈

该项目循环依赖是采用了棱角分明2和打字稿本地NPM服务器上运行,并使用角CLI建。共享集服务,避免在共享组件

建筑

该项目共有三个模块。第一个是非UI服务和组件。第二个是UI组件和布局。第三个也是最后一个模块用于UI服务。他们被分解为如下图所示:

Application Architecture

正如你所看到的,我真的不知道我是否需要一个父模块这里与否,因此最上面的项目”父母MODULE?”

的问题

  1. 共享跨越多个模块
  2. 避免循环依赖的服务的单当两个模块需要相互起作用

问题1 - 横向中共享服务的Singleton多个模块

就我而言,我需要UI模块非UI模块共享UI服务模块中的所有服务的单身人士。

我曾尝试

到目前为止,我已经使用forRoot()无济于事,以及试图将服务本身转移到父模块,并从那里向他们提供尝试。不管我做什么,我似乎都无法让这两个模块从UI服务模块共享一个单例。

问题2 - 避免循环依赖当两个模块都需要互相

我面对我的应用程序的另一个问题是,我有一个模块的一部分,需要所有其它模块,这反过来需要的第一个模块的一部分为了工作。

在非UI模块中,您将看到页眉/页脚需要使用UI模块才能正常工作。但是,在UI模块中,布局需要访问页眉/页脚才能将这些项目提供为布局的一部分。这形成了一个循环依赖关系,我不能完全消除我的头。

我曾尝试

我想到了移动布局了UI模块到自己的模块,但是他们也需要在UI模块的组件部分的引用,所以如果只要我进口该模块我重新创建循环依赖。

解决方案

我需要一种方法来消除循环依赖,并以某种方式共享所有服务中的一个单所有其它模块之间的UI服务模块中。

我一直在努力寻找解决这两个问题的一个星期,现在我认为在这一点上我无法看到树木的森林。我确信我错过了一些愚蠢的东西,但我似乎无法解决这个问题。

回答

1

有一个CoreModule只提供不依赖于任何其他模块,并且预计是单身的服务。该模块只能由根AppModule导入。这将保证这些服务是单身人士(他们只在CoreModule提供)。在我的应用程序中,我拥有全球服务,如AuthService。这将解决你的单身问题。

有一个SharedModule导出组件,指令,甚至是由多个模块共享的Angular模块。在我自己的应用程序中,该模块包含我使用的各种组件,例如DialogComponent或Angular自己的FormsModuleCommonModule。这SharedModule不是提供您的全球服务。将该模块导入每个其他模块。这将解决你的循环依赖问题。

总之,您可以将CoreModuleSharedModule视为辅助模块。他们自己不建立您的网站,但他们提供您的网站模块所需的依赖关系。您可以从文档的reading this chapter中受益,然后返回到您的项目。

+0

这并不能真正解决我的问题,因为它需要将页眉/页脚移动到不同的模块,这在我的应用程序体系结构中是不可能的。碎片必须保留在原处。我可以修改的唯一东西是进口商和供应商。 – StephenRios