如何正确使用Laravel Service Container?

时间:2017-03-20 15:26:35

标签: laravel service containers

好的,我已经看过关于这个主题的Laracast视频,并且还阅读了文档,但我仍然错过了这里的核心观点。我们假设我们有以下结构:

enter image description here

所以我理解了如何创建服务提供者,将类绑定到服务容器并稍后解决它。但是如果" MyCustomClass"绑定必须被替换,让我们说" \ App \ SomeOtherClass"。这将导致缺少" SomeOtherClass"如果我不引用它。这引出了我的问题:"使用服务容器有什么意义,因为我仍然需要再次引用绑定类?我在这里做错了什么?

1 个答案:

答案 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,然后返回您想要的实现。

在控制器内部,您应该依赖注入您的接口,然后最终会为您提供默认类。

这意味着您可以快速将一个类替换为具有相同界面的另一个类,或者在测试时轻松模拟它。