如何在 Yii2 中将接口注入控制器的构造函数

Posted

技术标签:

【中文标题】如何在 Yii2 中将接口注入控制器的构造函数【英文标题】:How can I inject interface into controller's constructor in Yii2 【发布时间】:2017-05-16 09:02:45 【问题描述】:

我要注入接口app\models\IFoo

private $foo;

public function __construct($id, $module, IFoo $foo, array $config = [])

    parent::__construct($id, $module, $config);
    $this->foo = $foo;

我应该如何设置容器来正确解决实现IFoo的具体类app\models\Foo中的依赖关系?

【问题讨论】:

你能解释一下这样做的目的是什么吗?可能更容易回答。 我在两个具体的类中实现了 IFoo:Foo 和 FooStub。我想使用存根进行测试等。我想将接口注入控制器并在设置文件(web.php 或其他)中设置具体类。 【参考方案1】:

尝试在入口脚本中这样调用它:

\Yii::$container->set('app\models\IFoo', $concreteClass);

其中$concreteClass'app\models\Foo''app\models\FooStub'

【讨论】:

我猜你可以将它添加到 web.php 用于非测试环境和 test.php 用于测试环境。

以上是关于如何在 Yii2 中将接口注入控制器的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Nest.js 模型依赖注入与 Mongoose 没有构造函数

Asp.Net Core默认注入方式下多接口实现如何注入以及如何指定构造函数注入

Asp.Net Core默认注入方式下多接口实现如何注入以及如何指定构造函数注入

学习yii2.0——依赖注入

[Asp.Net Core]Autofac单抽象多实现构造函数注入

[Asp.Net Core]Autofac单抽象多实现构造函数注入