2017-08-12 113 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