1212use Mathematicator \Engine \Router \Router ;
1313use Mathematicator \Engine \Translation \TranslatorHelper ;
1414use Nette \DI \CompilerExtension ;
15+ use Nette \Schema \Expect ;
16+ use Nette \Schema \Schema ;
1517
1618final class EngineExtension extends CompilerExtension
1719{
20+ public function getConfigSchema (): Schema
21+ {
22+ return Expect::structure ([
23+ 'extraModules ' => Expect::arrayOf (Expect::string ())->castTo ('array ' ),
24+ ])->castTo ('array ' );
25+ }
26+
27+
1828 public function beforeCompile (): void
1929 {
2030 $ builder = $ this ->getContainerBuilder ();
@@ -26,12 +36,23 @@ public function beforeCompile(): void
2636 ->setFactory (TranslatorHelper::class);
2737
2838 $ builder ->addDefinition ($ this ->prefix ('sampleModule ' ))
29- ->setFactory (SampleModule::class);
39+ ->setFactory (SampleModule::class)
40+ ->setAutowired (SampleModule::class);
3041
31- $ builder ->addDefinition ($ this ->prefix ('engine ' ))
42+ $ engine = $ builder ->addDefinition ($ this ->prefix ('engine ' ))
3243 ->setFactory (Engine::class)
3344 ->addSetup ('?->addExtraModule(?) ' , ['@self ' , '@ ' . SampleModule::class]);
3445
46+ if ($ this ->config ['extraModules ' ] !== []) {
47+ foreach ($ this ->config ['extraModules ' ] as $ extraModule ) {
48+ $ builder ->addDefinition ($ this ->prefix ('extraModuleUser ' ) . '. ' . md5 ($ extraModule ))
49+ ->setFactory ($ extraModule )
50+ ->setAutowired ($ extraModule );
51+
52+ $ engine ->addSetup ('?->addExtraModule(?) ' , ['@self ' , '@ ' . $ extraModule ]);
53+ }
54+ }
55+
3556 $ builder ->addDefinition ($ this ->prefix ('queryNormalizer ' ))
3657 ->setFactory (QueryNormalizer::class);
3758
0 commit comments