4
假設我有一個BaseForm
這取決於或IResourceManager
或類似的東西。目前它使用我知道是反模式的服務定位器來解決所需服務的正確實現。混淆了使用IOC容器,服務定位器和工廠
- 正在使用構造函數注入正確的方式來解決這種依賴?
- 我是否必須在容器中註冊我的
BaseForm
(及其派生類型)以創建具有已解決依賴項的實例?這不是使一切複雜化? - 使用圍繞服務定位器的靜態工廠是不好的?
- 單元測試放在一邊,我真的會因爲使用服務定位器反模式而受到懲罰嗎?
很抱歉,一次詢問很多問題。我讀過以下的SO問題和其他許多人,但閱讀它們只是添加到我的困惑:
- How to use Dependency Injection and not Service Locator
- What's the difference between the Dependency Injection and Service Locator patterns?
- How to avoid Service Locator Anti-Pattern?
什麼非UI類?我不想在容器內註冊所有的依賴類(不是組件或服務)。 – reticent
對於其他一切,請使用DI並確保容器可以解決它們。大多數容器允許您進行批量註冊,這意味着您可以在一個(或幾個)語句中註冊一整套(相關)組件。這可以讓您的作文根部小巧且可維護。 – Steven