我是否以正确的方式使用 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.
我开始使用 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.