Skip to content

Commit

Permalink
Feature/event system (#353)
Browse files Browse the repository at this point in the history
* Start introducing event system architecture

* Finish implementing event system
  • Loading branch information
cspray committed Jun 4, 2024
1 parent 56c5860 commit 12bca19
Show file tree
Hide file tree
Showing 26 changed files with 976 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/Event/AnalysisEmitter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php declare(strict_types=1);

namespace Cspray\AnnotatedContainer\Event;

use Cspray\AnnotatedContainer\Attribute\ServicePrepare;
use Cspray\AnnotatedContainer\Definition\ContainerDefinition;
use Cspray\AnnotatedContainer\Definition\InjectDefinition;
use Cspray\AnnotatedContainer\Definition\ServiceDefinition;
use Cspray\AnnotatedContainer\Definition\ServiceDelegateDefinition;
use Cspray\AnnotatedContainer\Definition\ServicePrepareDefinition;
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalysisOptions;
use Cspray\AnnotatedTarget\AnnotatedTarget;

interface AnalysisEmitter {

public function emitBeforeContainerAnalysis(ContainerDefinitionAnalysisOptions $analysisOptions) : void;

public function emitAnalyzedServiceDefinitionFromAttribute(
AnnotatedTarget $annotatedTarget,
ServiceDefinition $serviceDefinition,
) : void;

public function emitAnalyzedServicePrepareDefinitionFromAttribute(
AnnotatedTarget $annotatedTarget,
ServicePrepareDefinition $servicePrepareDefinition,
) : void;

public function emitAnalyzedServiceDelegateDefinitionFromAttribute(
AnnotatedTarget $annotatedTarget,
ServiceDelegateDefinition $serviceDelegateDefinition,
) : void;

public function emitAnalyzedInjectDefinitionFromAttribute(
AnnotatedTarget $annotatedTarget,
InjectDefinition $injectDefinition,
) : void;

public function emitAnalyzedContainerDefinitionFromCache(
ContainerDefinition $definition,
string $cacheFile
) : void;

public function emitAfterContainerAnalysis(
ContainerDefinitionAnalysisOptions $analysisOptions,
ContainerDefinition $containerDefinition,
) : void;

}
21 changes: 21 additions & 0 deletions src/Event/BootstrapEmitter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php declare(strict_types=1);

namespace Cspray\AnnotatedContainer\Event;

use Cspray\AnnotatedContainer\AnnotatedContainer;
use Cspray\AnnotatedContainer\Bootstrap\BootstrappingConfiguration;
use Cspray\AnnotatedContainer\Bootstrap\ContainerAnalytics;
use Cspray\AnnotatedContainer\Definition\ContainerDefinition;

interface BootstrapEmitter {

public function emitBeforeBootstrap(BootstrappingConfiguration $bootstrappingConfiguration) : void;

public function emitAfterBootstrap(
BootstrappingConfiguration $bootstrappingConfiguration,
ContainerDefinition $containerDefinition,
AnnotatedContainer $container,
ContainerAnalytics $containerAnalytics,
) : void;

}
36 changes: 36 additions & 0 deletions src/Event/ContainerFactoryEmitter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php declare(strict_types=1);

namespace Cspray\AnnotatedContainer\Event;

use Cspray\AnnotatedContainer\AnnotatedContainer;
use Cspray\AnnotatedContainer\ContainerFactory\AliasResolution\AliasResolutionReason;
use Cspray\AnnotatedContainer\Definition\AliasDefinition;
use Cspray\AnnotatedContainer\Definition\ContainerDefinition;
use Cspray\AnnotatedContainer\Definition\InjectDefinition;
use Cspray\AnnotatedContainer\Definition\ServiceDefinition;
use Cspray\AnnotatedContainer\Definition\ServiceDelegateDefinition;
use Cspray\AnnotatedContainer\Definition\ServicePrepareDefinition;
use Cspray\AnnotatedContainer\Event\Listener\ServiceShared;
use Cspray\AnnotatedContainer\Profiles;

interface ContainerFactoryEmitter {

public function emitBeforeContainerCreation(Profiles $profiles, ContainerDefinition $containerDefinition) : void;

public function emitServiceFilteredDueToProfiles(Profiles $profiles, ServiceDefinition $serviceDefinition) : void;

public function emitServiceShared(Profiles $profiles, ServiceDefinition $serviceDefinition) : void;

public function emitInjectingMethodParameter(Profiles $profiles, InjectDefinition $injectDefinition) : void;

public function emitInjectingProperty(Profiles $profiles, InjectDefinition $injectDefinition) : void;

public function emitServicePrepared(Profiles $profiles, ServicePrepareDefinition $servicePrepareDefinition) : void;

public function emitServiceDelegated(Profiles $profiles, ServiceDelegateDefinition $serviceDelegateDefinition) : void;

public function emitServiceAliasResolution(Profiles $profiles, AliasDefinition $aliasDefinition, AliasResolutionReason $resolutionReason) : void;

public function emitAfterContainerCreation(Profiles $profiles, ContainerDefinition $containerDefinition, AnnotatedContainer $container) : void;

}
Loading

0 comments on commit 12bca19

Please sign in to comment.