Skip to content

Commit

Permalink
InjectExtension: scans resolved class [Closes #218]
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Oct 31, 2019
1 parent c01053f commit bf3701e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/DI/Extensions/InjectExtension.php
Expand Up @@ -44,7 +44,8 @@ public function beforeCompile()

private function updateDefinition(Definitions\ServiceDefinition $def): void
{
$class = $def->getType();
$resolver = new DI\Resolver($this->getContainerBuilder());
$class = $resolver->resolveEntityType($def->getFactory()) ?: $def->getType();
$setups = $def->getSetup();

foreach (self::getInjectProperties($class) as $property => $type) {
Expand All @@ -61,7 +62,7 @@ private function updateDefinition(Definitions\ServiceDefinition $def): void
array_unshift($setups, $inject);
}

foreach (array_reverse(self::getInjectMethods($def->getType())) as $method) {
foreach (array_reverse(self::getInjectMethods($class)) as $method) {
$inject = new Definitions\Statement($method);
foreach ($setups as $key => $setup) {
if ($setup->getEntity() === $inject->getEntity()) {
Expand Down
49 changes: 49 additions & 0 deletions tests/DI/InjectExtension.interface.phpt
@@ -0,0 +1,49 @@
<?php

/**
* Test: Nette\DI\Compiler: inject.
*/

declare(strict_types=1);

use Nette\DI;
use Nette\DI\Definitions\Reference;
use Nette\DI\Definitions\Statement;
use Tester\Assert;


require __DIR__ . '/../bootstrap.php';


interface IService
{
}

class Service implements IService
{
public $foo;


public function injectFoo(stdClass $foo)
{
$this->foo = $foo;
}
}


$compiler = new DI\Compiler;
$compiler->addExtension('inject', new Nette\DI\Extensions\InjectExtension);
$container = createContainer($compiler, '
services:
one:
type: IService
factory: Service
inject: true
');


$builder = $compiler->getContainerBuilder();

Assert::equal([
new Statement([new Reference('self'), 'injectFoo']),
], $builder->getDefinition('one')->getSetup());

0 comments on commit bf3701e

Please sign in to comment.