Laravel 中的简单自动依赖注入
Simple automatic dependency injection in Laravel
我知道控制器中的 Laravel 可以自动解析方法:
//A
class ScriptsController extends Controller {
public function __construct(Script $scripts){ // Script automatically injected
$this->scripts = $scripts;
}
public function store(Request $request, $id){ // Request automatically injected
// do something
}
}
我只是想用任何 class 或方法做同样的事情。
// B1
class MyClass extends Controller {
public function __construct(Bar $bar){ // Bar to be automatically injected
$this->bar = $bar;
}
public function doSomething(Foo $foo, $id){ // Foo to be automatically injected
$foo->do();
}
}
然后去别的地方
// B2
$class = new MyClass(); // without an error
$class2 = new MyClass();
$class2->doSomething(); // ditto
有 tutorials about this 但他们不是直接回答这个问题,而是倾向于对服务提供商的工作方式等进行详细解释。
是否有一种简单的方法可以在某处添加一行(可能是 Bind
?)让容器解析依赖关系,以便上面的 B2
有效?
我认为您无法使用该特定语法来做到这一点。您可以让 Laravel 自动为您的 class 注入依赖项,但无论如何您都需要从容器中解析它。
请参阅此处的文档以了解绑定:https://laravel.com/docs/5.3/container#binding 以及更进一步,从容器中解析 classes。
我知道控制器中的 Laravel 可以自动解析方法:
//A
class ScriptsController extends Controller {
public function __construct(Script $scripts){ // Script automatically injected
$this->scripts = $scripts;
}
public function store(Request $request, $id){ // Request automatically injected
// do something
}
}
我只是想用任何 class 或方法做同样的事情。
// B1
class MyClass extends Controller {
public function __construct(Bar $bar){ // Bar to be automatically injected
$this->bar = $bar;
}
public function doSomething(Foo $foo, $id){ // Foo to be automatically injected
$foo->do();
}
}
然后去别的地方
// B2
$class = new MyClass(); // without an error
$class2 = new MyClass();
$class2->doSomething(); // ditto
有 tutorials about this 但他们不是直接回答这个问题,而是倾向于对服务提供商的工作方式等进行详细解释。
是否有一种简单的方法可以在某处添加一行(可能是 Bind
?)让容器解析依赖关系,以便上面的 B2
有效?
我认为您无法使用该特定语法来做到这一点。您可以让 Laravel 自动为您的 class 注入依赖项,但无论如何您都需要从容器中解析它。
请参阅此处的文档以了解绑定:https://laravel.com/docs/5.3/container#binding 以及更进一步,从容器中解析 classes。