2015-02-11 58 views
14

我目前正在編寫我自己的學習目的MVC框架,並決定使用依賴注入容器來共享類之間的常用對象(例如數據庫實例)。我應該在MVC中傳遞依賴注入容器(DIC)作爲參數嗎?

我在我的引導文件中初始化了容器,並且在Application類中有一個實例,在路由過程中傳遞容器實例是否是一個好習慣? (即將容器對象作爲參數傳遞給構造函數ControllerBase)。另外,在我的ModelBase的構造函數中接受容器作爲參數的好習慣?

+7

你在做什麼號(在整個事情經過)被稱爲服務定位器,是一個反模式。 – PeeHaa 2015-02-11 17:50:59

+0

容器不應該被傳遞,如果它完成,那麼它應該只是一個延遲加載的細節。爲了澄清,在測試MVC設置中涉及的任何類時,無論您是否在嘲笑,都不應該編寫與容器相關的任何內容。 – Ocramius 2015-02-11 17:52:26

+1

我已經寫了一個有關使用全局變量的答案,它有許多與服務定位器相同的問題。雖然它不是你的問題的確切答案,它值得一讀,並肯定與你的問題相關http://stackoverflow.com/questions/11923272/use-global-variables-in-a-class/11923384#11923384 – PeeHaa 2015-02-11 18:01:59

回答

1

聽起來作爲一個依賴注入是值得你在做什麼不同。這聽起來更像是一個ServiceLocator,一個倉庫或其他。通常情況下,依賴注入器位於調用之間(如果用於參數注入)或創建(如果將其用於字段或構造函數注入)之間。

依賴注射器的使用必須是完全透明的代碼/對象被注入到。所以如果你通過一個參考你做錯了什麼。

另外,DependencyInjector屬於你的代碼運行的內環境。現在看它。依賴注入一個,除非你使用的應用程序爲你在運行的框架,甚至不知道該應用程序。

因此,獲得依賴注入工作意味着實際應用中沒有提及的注射器。目標是以注入或不注入的方式運行應用程序。 Periode。