首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PHP-DI中的PHP定义不起作用?

为什么PHP-DI中的PHP定义不起作用?
EN

Stack Overflow用户
提问于 2020-05-27 18:29:07
回答 1查看 209关注 0票数 0

我尝试在项目中的处理程序(服务)中注入依赖项

代码语言:javascript
复制
class App
{
    public function __construct()
    {
        $this->di();
    }

    public function di() {
        $containerBuilder = new ContainerBuilder;
        $containerBuilder->addDefinitions([
            RegionSql::class => create(App\Connections\MySqlConnection::class),
            CreateRegionHandler::class => create(Region\Infrastructure\Persistance\RegionSql::class),
        ]);
        $container = $containerBuilder->build();
        return $container;
    }
}

我的处理程序

代码语言:javascript
复制
class CreateRegionHandler
{
    private RegionRepository $repository;

    public function __construct(RegionRepository $repository)
    {
        $this->repository = $repository;
    }

RegionRepository -接口,RegionSQL是实现

我尝试用commandBus之类的东西运行一个处理程序

$this->commandBus->execute(new CreateRegionCommand('address', 'postal_code', 'country'));

CommandBus

代码语言:javascript
复制
  public function execute($command)
    {
        $handler = $this->resolveHandler($command);
        call_user_func_array([$handler, 'handle'], [$command]);
    }

    private function resolveHandler($command)
    {
        $handler_class = substr(get_class($command), 0, -7) . 'Handler';
        $run = new \ReflectionClass($handler_class);
        return $run->newInstance();
    }

但是我得到一个错误的Too few arguments to function Region\Application\Command\CreateRegionHandler::__construct(), 0 passed and exactly 1 expected in Region\Application\Command\CreateRegionHandler.php:

如何在我的CreateRegionHandler中获取$repository?我尝试过CreateRegionHandler::class => autowire(Region\Infrastructure\Persistance\RegionSql::class),但它也不起作用。谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 18:33:00

看起来您是在App类中创建容器,但您并没有使用它。

PHP-DI不会神奇地拦截类的创建。您必须使用$container->get(<class name>)而不是$run->newInstance()

有关更多详细信息,请参阅the documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62040939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档