1 | <?php |
||
12 | class Injector implements InjectorInterface |
||
13 | { |
||
14 | /** |
||
15 | * @var string |
||
16 | */ |
||
17 | private $classDir; |
||
18 | |||
19 | /** |
||
20 | * @var Container |
||
21 | */ |
||
22 | private $container; |
||
23 | |||
24 | /** |
||
25 | * @param AbstractModule $module |
||
26 | * @param string $classDir |
||
27 | */ |
||
28 | 37 | public function __construct(AbstractModule $module = null, $classDir = null) |
|
29 | { |
||
30 | 37 | if (is_null($module)) { |
|
31 | 5 | $module = new NullModule; |
|
32 | } |
||
33 | 37 | $module->install(new AssistedModule); |
|
34 | 37 | $this->container = $module->getContainer(); |
|
35 | 37 | $this->classDir = $classDir ?: sys_get_temp_dir(); |
|
36 | 37 | $this->container->weaveAspects(new Compiler($this->classDir)); |
|
37 | |||
38 | // builtin injection |
||
39 | 37 | (new Bind($this->container, 'Ray\Di\InjectorInterface'))->toInstance($this); |
|
40 | 37 | } |
|
41 | |||
42 | /** |
||
43 | * @param string $interface |
||
44 | * @param string $name |
||
45 | * |
||
46 | * @return mixed |
||
47 | */ |
||
48 | 37 | public function getInstance($interface, $name = Name::ANY) |
|
59 | |||
60 | /** |
||
61 | * @param string $class |
||
62 | */ |
||
63 | 13 | private function bind($class) |
|
70 | |||
71 | /** |
||
72 | * Wakeup |
||
73 | */ |
||
74 | 6 | public function __wakeup() |
|
87 | } |
||
88 |