好的,我已经看过关于这个主题的Laracast视频,并且还阅读了文档,但我仍然错过了这里的核心观点。我们假设我们有以下结构:
所以我理解了如何创建服务提供者,将类绑定到服务容器并稍后解决它。但是如果" MyCustomClass"绑定必须被替换,让我们说" \ App \ SomeOtherClass"。这将导致缺少" SomeOtherClass"如果我不引用它。这引出了我的问题:"使用服务容器有什么意义,因为我仍然需要再次引用绑定类?我在这里做错了什么?
答案 0 :(得分:2)
绑定到两个可交换类符合的接口/契约。
interface CustomInterface
{
public function greeting();
}
class FirstCustomClass implements CustomInterface
{
public function greeting()
{
return 'hello world';
}
}
class SecondCustomClass implements CustomInterface
{
public function greeting()
{
return 'hello world two';
}
}
然后在您的服务提供者中绑定到Namespace\Of\My\Interface\CustomInterface:class
,然后返回您想要的实现。
在控制器内部,您应该依赖注入您的接口,然后最终会为您提供默认类。
这意味着您可以快速将一个类替换为具有相同界面的另一个类,或者在测试时轻松模拟它。