如果一個類綁定到的IoC ...Laravel:綁定到IoC容器
App::bind('Thing', function() {
return new \ThingOne;
});
然後,ThingOne
對象將永遠,除非你叫App::make('Thing')
實例化。這是一件好事。
但是,如果您嘗試覆蓋綁定:
App::bind('Thing', function() {
return new \ThingOne;
});
App::bind('Thing', function() {
return new \ThingTwo;
});
App::bind('Thing', function() {
return new \ThingThree;
});
...然後ThingTwo
對象和ThingThree
對象將被實例化(並呼籲它們的構造函數),即使你從來沒有所謂App::make('Thing')
!這是一件壞事!爲什麼,以及如何防止這種情況發生? IoC如果不允許我們覆蓋綁定,那麼我們可以擴展包和什麼? (這就是我想要做什麼:綁定類國際奧委會我的包,然後實現在其他項目上的包時,可選覆蓋它們)
順便說一句,這種情況是否使用bind()
或singleton()
沒有區別。
非常感謝您的任何指導。
你有沒有嘗試在重新綁定對象之前調用App :: offsetUnset('Thing')? –
@FractalizeR我沒有 - 這工作,謝謝! – Leng
歡迎您:) –