service factory

This commit is contained in:
Yuri Kuznetsov
2013-11-19 12:53:46 +02:00
parent ee292e9552
commit e36617e01b
+19 -8
View File
@@ -6,12 +6,13 @@ class ServiceFactory
{
private $container;
private $metadata;
public function __construct(Container $container)
{
$this->container = $container;
$this->metadata = $this->container->get('metadata');
}
protected function getCotainer()
@@ -19,21 +20,31 @@ class ServiceFactory
return $this->container;
}
public function create($name)
{
// TODO lookup in metadata which module to use
$className = '\\Espo\\Services\\' . $name;
public function createByClassName()
{
if (class_exists($className)) {
$service = new $className();
$dependencies = $service->dependencies;
foreach ($dependencies as $name) {
$setMethod = 'set' . ucfirst($name);
$service->$setMethod($this->getCotainer()->get($name));
$service->$setMethod($this->container->get($name));
}
return $service;
}
// TODO throw an exception
return null;
}
public function create($name)
{
$moduleName = $this->metadata->getScopeModuleName($name);
if ($moduleName) {
$className = '\\Espo\\Modules\\' . $moduleName . '\\Services\\' . $name;
} else {
$className = '\\Espo\\Services\\' . $name;
}
return $this->createByClassName($className);
}
}