我应该在 Yii2 中哪里设置 DI 容器?

Ale*_*bak 4 dependency-injection yii2

我有一个界面。还有一个班级。该类实现接口并扩展BaseObject。它类似于业务逻辑服务。我将通过构造函数将其注入控制器中。我的目标是使用接口的依赖关系。

我正在查看文档,但我不明白,我应该在哪里编写这段代码。它是主配置的一部分吗?或者这是某种新的配置?是一个单独的文件吗?如果是 yse,Yii2 如何理解它的 DI 配置?

Mic*_*ica 7

您可以在应用程序配置中设置 DI 容器。例如在 web.php 配置中:

$config = [
    // ... 
    'container' => [
        'definitions' => [
            \my\namespace\MyInterface::class => \my\namespace\MyClass::class,
            // ... other definitions
        ],
    ],
    // ... other configs
];
Run Code Online (Sandbox Code Playgroud)

设置 DI 的另一个好地方可能是在组件的引导方法中。例如在模块类中。

class MyModule extends \yii\base\Module implements \yii\base\BootstrapInterface
{
    public function bootstrap($app)
    {
        Yii::$container->set(
            \my\namespace\MyInterface::class,
            \my\namespace\MyClass::class
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须将模块添加到应用程序的bootstrap属性中。