diff --git a/CHANGES.md b/CHANGES.md index 7169c93..a3fbced 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,10 @@ # Changes History +1.3.1 +----- +- Resolving service dependency now happened on factory side in case if service inherit EntityService class +and don't has own constructor. + 1.3.0 ----- - Remove direct dependency from dingo/api diff --git a/src/Services/EntityServiceFactory.php b/src/Services/EntityServiceFactory.php index 8bcc56b..01e7abc 100644 --- a/src/Services/EntityServiceFactory.php +++ b/src/Services/EntityServiceFactory.php @@ -83,14 +83,20 @@ public function build(string $modelClass): IEntityService protected function buildEntityService(string $modelClass): IEntityService { try { - if (isset($this->registeredServices[$modelClass])) { - return $this->container->make($this->registeredServices[$modelClass]); + $entityServiceClass = $this->registeredServices[$modelClass] ?? EntityService::class; + + $parameters = []; + + if ($entityServiceClass === EntityService::class || + is_subclass_of($entityServiceClass, EntityService::class) + ) { + $parameters = [ + 'className' => $modelClass, + 'repository' => $this->repositoryFactory->getRepository($modelClass), + ]; } - return $this->container->make(EntityService::class, [ - 'className' => $modelClass, - 'repository' => $this->repositoryFactory->getRepository($modelClass), - ]); + return $this->container->make($entityServiceClass, $parameters); } catch (RepositoryException $exception) { throw new EntityServiceException($exception->getMessage(), $exception->getCode(), $exception); } diff --git a/tests/EntityServiceFactoryTest.php b/tests/EntityServiceFactoryTest.php index 07fcce8..127a51e 100644 --- a/tests/EntityServiceFactoryTest.php +++ b/tests/EntityServiceFactoryTest.php @@ -79,8 +79,8 @@ public function testRegisterCustomRepositories(string $model, string $serviceCla $this->repositoryFactory->shouldReceive('getRepository') ->withArgs([$model]) ->andReturn(Mockery::mock(IRepository::class)); - $this->container->shouldReceive('make')->withArgs([$serviceClass])->andReturn($expectedService); - $actualService= $entityServiceFactory->build($model); + $this->container->shouldReceive('make')->andReturn($expectedService); + $actualService = $entityServiceFactory->build($model); $this->assertSame($expectedService, $actualService); } }