diff --git a/composer.json b/composer.json index a12c3bf..49a7742 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "micro/kernel-boot-configuration", "description": "Micro Framework: Kernel Boot loader - component to provide plugin configuration", "type": "library", - "version": "1.0", + "version": "1.1", "require": { "micro/kernel": "^1" }, diff --git a/src/Boot/ConfigurationProviderBootLoader.php b/src/Boot/ConfigurationProviderBootLoader.php index bbf17b6..6364d00 100644 --- a/src/Boot/ConfigurationProviderBootLoader.php +++ b/src/Boot/ConfigurationProviderBootLoader.php @@ -5,12 +5,13 @@ use Micro\Framework\Kernel\Configuration\ApplicationConfigurationFactoryInterface; use Micro\Framework\Kernel\Configuration\ApplicationConfigurationInterface; use Micro\Framework\Kernel\Configuration\DefaultApplicationConfigurationFactory; -use Micro\Framework\Kernel\Configuration\Plugin\ConfigurableInterface; +use Micro\Framework\Kernel\Configuration\Resolver\PluginConfigurationClassResolver; +use Micro\Framework\Kernel\Plugin\ConfigurableInterface; use Micro\Framework\Kernel\Plugin\PluginBootLoaderInterface; class ConfigurationProviderBootLoader implements PluginBootLoaderInterface { - private readonly ApplicationConfigurationInterface $configuration; + private readonly ApplicationConfigurationInterface $applicationConfiguration; /** * @param array|ApplicationConfigurationInterface|ApplicationConfigurationFactoryInterface $config @@ -29,7 +30,7 @@ public function __construct( $applicationConfig = $applicationConfig->create(); } - $this->configuration = $applicationConfig; + $this->applicationConfiguration = $applicationConfig; } /** @@ -41,6 +42,17 @@ public function boot(object $applicationPlugin): void return; } - $applicationPlugin->setConfiguration($this->configuration); + $applicationPlugin->setConfiguration( + $this->createPluginConfigurationClassResolver() + ->resolve($applicationPlugin->name()) + ); + } + + /** + * {@inheritDoc} + */ + protected function createPluginConfigurationClassResolver(): PluginConfigurationClassResolver + { + return new PluginConfigurationClassResolver($this->applicationConfiguration); } } \ No newline at end of file diff --git a/src/Configuration/Resolver/PluginConfigurationClassResolver.php b/src/Configuration/Resolver/PluginConfigurationClassResolver.php index 835b85c..4321b52 100755 --- a/src/Configuration/Resolver/PluginConfigurationClassResolver.php +++ b/src/Configuration/Resolver/PluginConfigurationClassResolver.php @@ -9,27 +9,25 @@ class PluginConfigurationClassResolver { /** - * @param string $pluginClass * @param ApplicationConfigurationInterface $applicationConfiguration */ public function __construct( - private readonly string $pluginClass, private readonly ApplicationConfigurationInterface $applicationConfiguration ) { } /** + * @param string $pluginClass + * * @return PluginConfigurationInterface */ - public function resolve(): PluginConfigurationInterface + public function resolve(string $pluginClass): PluginConfigurationInterface { $configClassDefault = PluginConfiguration::class; $configClasses = []; - foreach ($this->getPluginClassResolvers() as $resolver) { - $configClass = $resolver->resolve($this->pluginClass); - + $configClass = $resolver->resolve($pluginClass); if(!class_exists($configClass)) { continue; } @@ -41,7 +39,7 @@ public function resolve(): PluginConfigurationInterface throw new \RuntimeException( sprintf( 'Too many configuration classes for Application plugin "%s". [%s]', - $this->pluginClass, + $pluginClass, implode(", ", $configClasses) ) ); diff --git a/src/Configuration/Resolver/PluginConfigurationClassResolverInterface.php b/src/Configuration/Resolver/PluginConfigurationClassResolverInterface.php index 8e348c8..44e9449 100755 --- a/src/Configuration/Resolver/PluginConfigurationClassResolverInterface.php +++ b/src/Configuration/Resolver/PluginConfigurationClassResolverInterface.php @@ -5,7 +5,8 @@ interface PluginConfigurationClassResolverInterface { /** - * @param string $pluginClass + * @param string $pluginClass + * * @return string */ public function resolve(string $pluginClass): string; diff --git a/src/Plugin/ConfigurableInterface.php b/src/Plugin/ConfigurableInterface.php index 3e42046..4c19417 100644 --- a/src/Plugin/ConfigurableInterface.php +++ b/src/Plugin/ConfigurableInterface.php @@ -17,4 +17,9 @@ public function configuration(): PluginConfigurationInterface; * @return void */ public function setConfiguration(PluginConfigurationInterface $pluginConfiguration): void; + + /** + * @return string + */ + public function name(): string; } \ No newline at end of file