在Laravel 5中实例化依赖项,这是一种好方法

时间:2015-07-13 09:44:45

标签: php laravel dependency-injection inversion-of-control

如果我键入提示所需的类/接口,Laravel 5提供自动依赖解析。但他们应该如何实例化呢?例如:

public function __construct(Dependency $dependency) {
    $this->dependency = $dependency;
}

然后,在另一种方法中,我想创建两个实例,如下所示:

$one = new Dependency(1);
$two = new Dependency(2);

最灵活,最友好的测试方式是什么?

1 个答案:

答案 0 :(得分:1)

请原谅我可怜的笑话,但这取决于。

看起来你误解了依赖性解决了一点点。 在您的示例中,属性“dependency”allready包含一个实例化对象。如果在另一个方法中需要两个不同的实例,则可以在那里实例化它们,注入容器或使用工厂。这取决于你的需求。

对laravel依赖解析的简短介绍

laravel中的自动依赖关系由service container提供,它用于传递(allready)实例化对象。必须将已解析的对象绑定到服务容器。最好的方法是通过service providers。在服务提供商的注册方法中,您可以进行绑定

$this->app->bind('Dependency', function ($app) {
    return new Dependency();
});

在此示例中,容器每次调用时都将返回一个新实例。

如果每次绑定单个单元时需要相同的实例

$this->app->singleton('Dependency', function ($app) {
    return new Dependency();
});