/** * Constructor. * * @param array $settings */ public function __construct(array $settings = []) { foreach ($settings as $id => $value) { if (is_string($value)) { $value = Definition::singleton($value); } if (is_int($id) && is_object($value)) { if ($value instanceof Definition) { $id = $value->getClass()->getName(); } else { $id = get_class($value); } } $this->set($id, $value); } }
protected function setUp() { $this->subject = new Container([Service1::class, new Service2(), Definition::object(Service3::class)->method('setProperty1')->method('setProperty2'), 'service1' => Definition::singleton(Service1::class), 'service2' => Definition::singleton(Service2::class, '@service3', new Service4()), 'service3' => function () { return new Service3(); }, 'service4' => Definition::singleton(Service4::class)->method('setProperty', '@service5'), 'service5' => Definition::singleton(Service5::class)->method('setProperty', '@service6'), 'service6' => Definition::singleton(Service6::class)->method('setProperty', '@service4:getProperty')]); }
<?php use Neat\Router\Router; use Neat\Config\Config; use Neat\Container; use Neat\Container\Definition; use Neat\Event\Dispatcher; use Neat\Http\Request; use Neat\Profiler\Profiler; use Neat\Util\Timer; return [Definition::singleton(Config::class), Definition::singleton(Dispatcher::class), Definition::singleton(Profiler::class, null, '@app:isInDevMode')->addTab('@Neat\\Profiler\\Tab\\Files')->addTab('@Neat\\Profiler\\Tab\\Locations')->addTab('@Neat\\Profiler\\Tab\\Memory')->addTab('@Neat\\Profiler\\Tab\\Time'), Definition::singleton(Request::class), Definition::singleton(Router::class)->properties(true)->addRoute('/module/:module/controller/:controller/action/:action')->addRoute('/controller/:controller/action/:action')->addRoute('/action/:action'), Definition::singleton(TemplateLoader::class, '@app:getAppDir')->setLocation('*', ['{{module}}/View/{{controller}}']), Definition::singleton(Timer::class)];
<?php use Neat\Config\Config; use Neat\Container; use Neat\Container\Definition; use Neat\Event\Dispatcher; use Neat\Http\Request; use Neat\Loader\FileLoader; use Neat\Profiler\Profiler; use Neat\Router\Router; use Neat\Util\Timer; return [Definition::singleton(Config::class, null, '@Neat\\Parser\\Json')->setPlaceholders(['app_dir' => '@app:getBasedir', 'app_namespace' => '@app:getNamespace']), Definition::singleton(Dispatcher::class), Definition::singleton(Profiler::class, null, '@app:isInDevMode')->setTabs(['@Neat\\Profiler\\Tab\\Files', '@Neat\\Profiler\\Tab\\Locations', '@Neat\\Profiler\\Tab\\Memory', '@Neat\\Profiler\\Tab\\Time']), Definition::singleton(Request::class), Definition::singleton(Router::class)->setRoutes(['/module/:module/controller/:controller/action/:action', '/controller/:controller/action/:action', '/action/:action']), Definition::singleton(FileLoader::class)->setPlaceholders(['app_dir' => '@app:getBasedir', 'module' => '@Neat\\Http\\Request:get:module:Module', 'controller' => '@Neat\\Http\\Request:get:controller:Home'])->setLocations(['config' => ['{{app_dir}}/etc/config'], 'template' => ['{{app_dir}}/src/{{module}}/View/Default', '{{app_dir}}/src/{{module}}/View/{{controller}}']]), Definition::singleton(Timer::class)];