我创建了一个非常简单的依赖注入容器。我可以通过说:
创建一个类的实例$foo = $container->get(Foo::class);
这很好用,允许我在Foo的构造函数中注入依赖项。现在我希望通过以下方式创建一个类的实例:
$user = new User();
我需要能够从User类中的容器访问服务,但我不确定最好的方法。我想避免的两种方法是将容器传递给构造函数,然后使用上面所示的容器get方法创建Foo实例。
如果有人能告诉我正确的方法,我会很感激。感谢
答案 0 :(得分:0)
您不必注入构造函数。注入的几种方法是通过setter函数
public function setUser(User $user) {
$this->user = $user;
}
或者您可以直接注入需要与类交互的函数
public function someFunction(User $user) {
$val = $user->doSomething();
}
答案 1 :(得分:0)
我想出了一个巧妙的方法。首先,我向容器添加了一个静态属性,指向当前实例。例如:
class Container {
protected static $instance;
public function __construct() {
static::$instance = $this;
}
...
}
然后我要做的就是创建一个静态get方法,例如:
public static function getInstance($name) {
return static::$instance->get($name);
}
不幸的是它不能有相同的名字。点击here了解实现目标的方法。
现在我可以在我的User类中说出以下内容:
var foo = Container::getInstance(Foo::class);