svb/service-factory-bundle

一种方便的方式,在无需使用sf服务标记的情况下自动将服务注入到工厂中。

dev-master 2024-02-13 10:38 UTC

README

使用工厂来编排symfony服务通常是通过在服务上注册一个服务标记,并将所有带有该标记的服务传递给工厂来完成的。

从3.4版本开始,我们得到了这个非常小的功能来简化查找标记服务并将它们注入工厂的整个过程,但这仍然有点复杂。

为了进一步改进这一点,我们决定提供AbstractServiceFactory(工厂)和AbstractFactoryService(服务)。为了让symfony依赖注入知道哪些继承自AbstractFactoryService的服务需要添加到哪些继承自AbstractServiceFactory的工厂中,所有服务都必须实现返回相应工厂FQCN的getFactoryServiceId方法。

安装

只需运行composer require,composer会完成其余的操作!
php composer.phar require svb/service-factory-bundle

示例服务

use SVB\ServiceFactoryBundle\FactoryServiceInterface;

class TestService implements FactoryServiceInterface
{
    public static function getFactoryServiceId(): string
    {
        return TestFactory::class;
    }
}

示例工厂

use SVB\ServiceFactoryBundle\AbstractServiceFactory;
use SVB\ServiceFactoryBundle\FactoryServiceInterface;

class TestFactory extends AbstractServiceFactory
{
    /**
     * @return FactoryServiceInterface[]
     */
    public function getAllServices(): array
    {
        /**
         * $this->services contains all FactoryServiceInterface inheriting
         * services that return the TestFactory FQCN on getFactoryServiceId
         */
        return $this->services;
    }
}

持续集成

执行单元测试:./phpunit --coverage-html coverage