diff --git a/src/Extension/ResourceExtension.php b/src/Extension/ResourceExtension.php index dd5ec28..a5ffe21 100755 --- a/src/Extension/ResourceExtension.php +++ b/src/Extension/ResourceExtension.php @@ -82,7 +82,8 @@ public function beforeCompile(): void } $def = $builder->addDefinition($this->prefix($name . '.' . $counter++)) - ->setFactory($class); + ->setFactory($class) + ->setType($class); $decorator = $resource->decorator; diff --git a/tests/Cases/Extension/ResourceExtension.phpt b/tests/Cases/Extension/ResourceExtension.phpt index 50deaaa..08f5837 100755 --- a/tests/Cases/Extension/ResourceExtension.phpt +++ b/tests/Cases/Extension/ResourceExtension.phpt @@ -8,6 +8,7 @@ use Contributte\DI\Extension\ResourceExtension; use Nette\DI\Compiler; use Nette\DI\Container; use Nette\DI\ContainerLoader; +use Nette\DI\Extensions\InjectExtension; use Nette\DI\MissingServiceException; use Nette\DI\ServiceCreationException; use Tester\Assert; @@ -15,6 +16,7 @@ use Tester\FileMock; use Tests\Fixtures\Bar\BarService; use Tests\Fixtures\Baz\BazService; use Tests\Fixtures\Baz\Nested\NestedBazService; +use Tests\Fixtures\Decorator\InjectService; use Tests\Fixtures\Foo\FooBarService; use Tests\Fixtures\Foo\FooService; use Tests\Fixtures\Scalar\ScalarService; @@ -265,3 +267,29 @@ test(static function (): void { }, 12); }, ServiceCreationException::class, "Service 'autoload._Tests_Fixtures_Scalar_.2' (type of Tests\Fixtures\Scalar\ScalarService): Parameter \$text in ScalarService::__construct() has no class type or default value, so its value must be specified."); }); + +// Register services manually (exception) +test(static function (): void { + $loader = new ContainerLoader(TEMP_DIR, true); + $class = $loader->load(static function (Compiler $compiler): void { + $compiler->addExtension('autoload', new ResourceExtension()); + $compiler->addExtension('inject', new InjectExtension()); + $compiler->addConfig(['parameters' => ['appDir' => TESTER_DIR]]); + $compiler->loadConfig(FileMock::create(' + autoload: + resources: + Tests\Fixtures\Decorator\: + paths: [%appDir%/fixtures/Decorator] + decorator: + inject: true + ', 'neon')); + }, 13); + + /** @var Container $container */ + $container = new $class(); + + /** @var InjectService $service */ + $service = $container->getByType(InjectService::class); + + Assert::notNull($service->authenticator); +}); diff --git a/tests/fixtures/Decorator/Authenticator.php b/tests/fixtures/Decorator/Authenticator.php new file mode 100644 index 0000000..b1231da --- /dev/null +++ b/tests/fixtures/Decorator/Authenticator.php @@ -0,0 +1,8 @@ +authenticator = $authenticator; + } + +}