1: <?php
2:
3: namespace Budabot\Core;
4:
5: use ReflectionAnnotatedClass;
6: use ReflectionClass;
7:
8: class Registry {
9: private static $repo = array();
10:
11: public static function setInstance($name, $obj) {
12: $name = strtolower($name);
13: LegacyLogger::log("DEBUG", "Registry", "Adding instance '$name'");
14: Registry::$repo[$name] = $obj;
15: }
16:
17: public static function formatName($name) {
18: $name = strtolower($name);
19: $array = explode("\\", $name);
20: return array_pop($array);
21: }
22:
23: public static function instanceExists($name) {
24: $name = strtolower($name);
25:
26: return isset(Registry::$repo[$name]);
27: }
28:
29: public static function getInstance($name, $reload = false) {
30: $name = strtolower($name);
31: LegacyLogger::log("DEBUG", "Registry", "Requesting instance for '$name'");
32:
33: $instance = Registry::$repo[$name];
34: if ($instance == null) {
35: LegacyLogger::log("WARN", "Registry", "Could not find instance for '$name'");
36: }
37:
38: return $instance;
39: }
40:
41: public static function injectDependencies($instance) {
42:
43: $reflection = new ReflectionAnnotatedClass($instance);
44: forEach ($reflection->getProperties() as $property) {
45: if ($property->hasAnnotation('Inject')) {
46: if ($property->getAnnotation('Inject')->value != '') {
47: $dependencyName = $property->getAnnotation('Inject')->value;
48: } else {
49: $dependencyName = $property->name;
50: }
51: $dependency = Registry::getInstance($dependencyName);
52: if ($dependency == null) {
53: LegacyLogger::log("WARN", "Registry", "Could resolve dependency '$dependencyName'");
54: } else {
55: $instance->{$property->name} = $dependency;
56: }
57: } else if ($property->hasAnnotation('Logger')) {
58: if (@$property->getAnnotation('Logger')->value != '') {
59: $tag = $property->getAnnotation('Logger')->value;
60: } else {
61: $array = explode("\\", $reflection->name);
62: $tag = array_pop($array);
63: }
64: $instance->{$property->name} = new LoggerWrapper($tag);
65: }
66: }
67: }
68:
69: public static function getAllInstances() {
70: return self::$repo;
71: }
72: }
73: