插件开发手册

依赖注入

最近更新:6个月前

容器类\Ebcms\Container

依赖注入来自开源项目ebcms/psr11,欢迎PR ^-^.

依赖注入的好处就是可以全局管理类,无须手动实例化。

自动实例化类

class Bar
{
    public function __construct()
    {
    }
}

class Foo
{
    public function __construct(Bar $bar)
    {
        $this->bar = $bar;
    }

    public function getBar()
    {
        return $this->bar;
    }
}

$foo = $container->get(Foo::class); //Foo
$foo->getBar(); //Bar

而无须实例化Foo类,也不需要实例化Bar类,这一切都通过$container帮您完成。

默认的,执行的控制器的构造方法__construct()支持依赖注入,例如:

use Ebcms\App;
use Ebcms\Config;
use Ebcms\Router;
use Xielei\Template;

class Index
{
    public function __construct(
        App $app,
        Router $router,
        Config $config,
        Template $template,
        ...
    ) {
        $config->get(......);
        $router->buildUrl(..);
    }
}

通过容器获取的类支持依赖注入,例如:

$container->get(Foo::class);

那么 此处的Foo类的构造函数就可以依赖注入

通过App::getInstrance()->execute(function(...){})实现依赖注入,例如:

App::getInstance()->execute(function (
    App $app,
    RequestHandler $requestHandler,
    RequestFilter $input,
    Router $router,
    Config $config,
    Template $template,
    ....
) {
    $app->....
});

Powered By EBCMS