0

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

这是我的公共/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 是不是内存/CPU/时间超载?

任何想法将不胜感激。

4

1 回答 1

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

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

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

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

假设您的 Flow 类有一些依赖项,您可以通过构造函数注入setter 注入来完成。


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');

您可以在文档中查看更多示例。DI 有时会让人觉得很神奇,但如果你理解正确,它会帮助你快速调试。

我注意到有人不喜欢这个答案。您可以自由地这样做,但提供更好的答案或编辑答案或写评论可以改进。

于 2019-12-07T17:44:20.823 回答