如果一个类绑定到的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
欢迎您:) –