我有一個關於角度依賴注射的快速問題。我已經閱讀過,如果你想要一個服務在應用程序中只有一個實例,它應該作爲提供者包含在AppModule中,而不是使用它的任何組件。這仍然會應用AppModule導入的其他模塊。例如,我想在我的SharedModule中將AuthService作爲提供者。如果我將這個模塊導入到AppModule中,那麼我的應用程序中的所有組件都將共享同一個服務實例嗎?角度依賴注射
角度依賴注射
回答
簡短的回答:是的
但..
不要指定共享模塊中應用範圍的單供應商。導入該共享模塊的延遲加載模塊將生成其自己的服務副本。
來源:https://angular.io/guide/ngmodule#why-userservice-isnt-shared
我看到,因爲可能多次導入SharedModule,所以會有多個AuthModule實例。在CoreModule中,它只會被導入一次。對? – user455289
@ user455289是exaclty,但只有當這些模塊被延遲加載。如果沒有,它會工作似乎但不推薦。如果在角度文檔中不推薦使用某些東西,則應該考慮它,因爲它們可能會在將來的版本中更改它。 – echonax
哦,對,謝謝。 – user455289
不,你不能使用NgModule進口/出口強制執行Singleton模式。正如echonax回答指出的那樣,懶加載模塊再次引導所有服務。
這樣說,你可以通過構造函數阻止模塊上的重複導入。這將迫使開發人員管理模塊加載順序,並且阻止懶惰模塊直接導入它。如果模塊是由輔助模塊導入的,它似乎解決了這個問題。
您可以阻止這樣在你NgModule類的構造函數
@NgModule({
providers: [
MySingletonService
]
})
export class ExampleModule {
public constructor(@Optional() @SkipSelf() parentModule: ExampleModule) {
if (parentModule) {
throw new Error('ExampleModule is already loaded');
}
}
}
最好是創建在其中只有一個服務模塊,而不是將其用於其他任何東西。這使得管理各種依賴關係變得更加容易。
- 1. 角度依賴注入
- 2. 角度2依賴注射(DI)只是不工作?
- 3. 角度凹坑依賴注入
- 4. 角度依賴注入錯誤
- 5. 角度多重依賴注入
- 6. 角度依賴注入性能
- 7. 注入角度消息依賴性失敗角度js
- 8. AngularJS依賴注射器
- 9. Pex&痣 - 依賴注射
- 10. 依賴注射通常?
- 11. 依賴注射收藏
- 12. 依賴注射角4:我的服務不是一個單
- 13. 角度注射器錯誤
- 14. 硒:依賴注射不起作用
- 15. Munq財產注射可選依賴
- 16. 分級注射器和依賴壽命
- 17. C#依賴注入投射問題
- 18. 注射自動裝配依賴失敗
- 19. 依賴注入的實現像角
- 20. 角2:父類依賴注入是undefined
- 21. 角1.5組件依賴注入
- 22. 依賴注入角提供者
- 23. 角依賴注入,使用服務
- 24. 打字稿角依賴注入失敗
- 25. 角模塊和依賴注入
- 26. 角2中的等級依賴注入
- 27. 注入依賴於角服務
- 28. ASP.NET:依賴注入和角色
- 29. 角:依賴注入與原型繼承
- 30. 依賴注入角組件,如指令
請在標題中描述您的問題。 –
我真的不知道該怎麼做。 – user455289
是的,除了懶惰的加載提供程序的根注入器 –