easy dependency injection / service container
for >=php5.4
and lightweight Compiler..
$this->container = new \Iono\Container\Container;
for concrete & abstract class
/**
* Interface ResolveInterface
*/
interface ResolveInterface
{
public function getInstance();
}
/**
* Class ResolveClass
*/
class ResolveClass implements ResolveInterface
{
protected $value;
public function getInstance()
{
return $this;
}
public function setValue($value)
{
$this->value = $value;
}
public function getValue()
{
return $this->value;
}
}
$this->container->binder("ResolveInterface", "ResolveClass");
$instance = $this->container->newInstance("ResolveInterface");
$this->container->singleton("ResolveInterface", "ResolveClass");
$instance = $this->container->newInstance("ResolveInterface");
for string
$context = $this->container->newInstance("iono.container.tests");
for object
$this->container->binder("std.class", new \stdClass());
$context = $this->container->newInstance("std.class");
$this->container->binder("closure", function () {
return new \stdClass();
});
$this->container->newInstance('closure');
$this->container->setParameters("ResolveConstructor", ["arg" => "dependency2"]);
$this->container->binder("ResolveInterface", "ResolveClass");
$class = $this->container->newInstance("ResolveConstructor");
parameters override
$class = $this->container->newInstance("ResolveConstructor", ["arg" => "dependency3"]);
//
$class = $this->container->newInstance("ResolveConstructor", ["arg" => $this->container->newInstance("stdclass")]);
contextual binding
// bind to same interface
$this->container->register("ResolveInterface", "Class1")->component('class1');
$this->container->register("ResolveInterface", 'Class2')->component('class2');
$this->container->qualifier('class1');
$this->container->qualifier('class2');