2014-02-07 127 views
0

我正在爲不使用ioc容器的內容管理系統編寫一個插件。php ioc容器內插件

在我的插件中使用像Pimple這樣的我自己的ioc容器來管理我的所有類,儘管我的插件擴展的框架沒有使用它,

回答

0

我意識到這是一個老問題,但這裏有雲:

它總是使用IoC的一個很好的做法。它可以幫助您分離對象創建和使用它們。

這個問題更像是:你能嗎? IoC容器必須知道從CMS需要的所有共享依賴項實例(否則它將創建新的),因此您需要列出所有這些實例,然後才能請求創建自己的對象。這可能會造成問題。

想象一下,您有一個常見的用例場景,您可以使用該CMS的單個共享依賴項。您也有一個罕見的情況,您可以使用其他10個共享依賴項,這些依賴項都來自CMS,並由CMS實例化。爲了使此注入工作,您需要將所有11個依賴項實例添加到IoC中,儘管大多數時候您只需要一個依賴項實例,而其他10個實例可能永遠不會實例化(但現在它們是,因爲你需要實例給他們)。您也不應將相同的邏輯添加到提供實例選擇的依賴項中,因爲您正在複製代碼,而且這也是您想要委派給IoC的工作。總之,如果你的插件在很大程度上依賴於來自CMS的單件服務(注意:不是單例模式,而是共享實例),那麼你不能真正有效地做到這一點。如果你可以從公共範圍(單身模式)訪問所有這些,你可能可以做到,但是這樣你的插件將不會被測試,並且你也會終止IoC的目的。

如果允許您從CMS創建自己的依賴關係,或者您不真正依賴它,或者您始終使用您需要的每個依賴關係,那麼您就很好,但這些都是罕見的用例。