我是否以正确的方式使用 Auraphp 进行依赖注入?

Am I using Auraphp in the right way for dependency injection?

我开始使用 Auraphp 进行依赖注入,并编写了一个示例应用程序。它按预期工作,但是,我不确定我是否以正确的方式使用它。有人可以告诉我我做的是否正确,或者有更好的使用 Aura 的方法吗?

这是我的 public/index.php:

use Aura\Di\ContainerBuilder;
use MyPackage\Base\Service;
use MyPackage\Base\Flow;

require_once dirname(__DIR__) . '/vendor/autoload.php';

$builder = new ContainerBuilder();
$di = $builder->newInstance();

$di->set('baseService', new Service);
$di->set('baseFlow', new Flow);

$service = $di->get('baseService');
$flow = $di->get('baseFlow');

$service->showMessage();
$flow->showMessage();

这是src/Service.php(src/Flow.php类似):

<?php

namespace MyPackage\Base;

class Service
{
    public function showMessage()
    {
        echo "Inside service";
    }
}

我主要想知道我是否受益于依赖注入的优势。另外这样使用Aura是不是memory/CPU/time重载了?

如有任何想法,我们将不胜感激。

$di->set('baseService', new Service);
$di->set('baseFlow', new Flow);

在这种情况下,您已经实例化了 class。但在大多数情况下,您可以使用延迟加载。在这种方法中,您还将受益于插入所需的必要依赖项。所以你的代码会变成

$di->set('baseService', $di->lazyNew('Service'));
$di->set('baseFlow', $di->lazyNew('Flow'));

示例取自:http://auraphp.com/packages/3.x/Di/services.html .

假设您的 Flow class 有一些依赖关系,您可以通过 constructor injection or setter injection.


class Flow
{
    public function __construct(Service $service)
    {
         $this->service = $service;
    }

    public function setSomething(Something $something)
    {
        // other dependency
    }

    public function showMessage()
    {
        echo "Inside service";
    }
}

现在你可以像这样定义

$di->params['Flow']['service'] = $di->lazyNew('Service');
$di->setters['Flow']['setSomething'] = $di->lazyNew('Something');

你可以看到更多examples in the documentation。 DI 有时感觉很神奇,但如果你正确理解它,它会帮助你快速调试。

I noticed someone dislike the answer. You are free to do it, but provide a better answer or edit the answer or write comments what can be improved.