【发布时间】:2018-07-03 22:17:04
【问题描述】:
我在 symfony 4.1 中创建服务时遇到了一点问题
我使用工厂来创建我的服务,并强制工厂拥有我制作接口的预期方法
<?php
namespace App\Service\Factory\Interfaces;
use App\Service\Interfaces\BaseModelServiceInterface;
use Doctrine\ODM\MongoDB\DocumentManager;
/**
* Interface ModelServiceFactoryInterfaces
* @package App\Service\Factory\Interfaces
*/
interface ModelServiceFactoryInterfaces
{
/**
* Create the Model related Service
*
* @return BaseModelServiceInterface
*/
public function createService(DocumentManager $dm);
}
我从自动装配的服务中获取 DocumentManager 以在工厂中创建存储库并将其传递给服务,就像这样
/**
* Class ChapterServiceFactory
* @package App\Service\Factory
*/
class ChapterServiceFactory implements ModelServiceFactoryInterfaces
{
/**
* @param DocumentManager $dm
* @return ChapterService|BaseModelServiceInterface
*/
public function createService(DocumentManager $dm)
{
$chapterRepository = $dm->getRepository(Chapter::class);
/**
* @var $chapterRepository ChapterRepository
*/
return new ChapterService($chapterRepository);
}
}
问题在于,如果我想在我的 ChapterService 中有另一个服务,我不能因为接口而在工厂中自动装配它,但我也不想删除接口。
有没有办法让接口拥有“动态参数”,或者除了接口之外的其他方式来强制工厂拥有 createService 方法?
【问题讨论】:
标签: symfony dependency-injection factory symfony4