|
2 | 2 |
|
3 | 3 | import act.Act; |
4 | 4 | import act.app.App; |
| 5 | +import act.app.conf.AppConfigurator; |
5 | 6 | import act.app.event.AppEventId; |
6 | 7 | import act.controller.ActionMethodParamAnnotationHandler; |
7 | 8 | import act.inject.ActProviders; |
@@ -45,12 +46,13 @@ protected void configure() { |
45 | 46 | }; |
46 | 47 |
|
47 | 48 | private volatile Genie genie; |
48 | | - private List<Object> modules; |
| 49 | + private Set<Object> modules; |
49 | 50 | private Set<Class<? extends Annotation>> injectTags = new HashSet<Class<? extends Annotation>>(); |
50 | 51 |
|
51 | 52 | public GenieInjector(App app) { |
52 | 53 | super(app); |
53 | | - modules = factories().append(SCOPE_MODULE); |
| 54 | + modules = factories(); |
| 55 | + modules.add(SCOPE_MODULE); |
54 | 56 | } |
55 | 57 |
|
56 | 58 | @Override |
@@ -106,18 +108,18 @@ public boolean subjectToInject(BeanSpec spec) { |
106 | 108 | return genie().subjectToInject(spec); |
107 | 109 | } |
108 | 110 |
|
109 | | - private C.List<Object> factories() { |
| 111 | + private C.Set<Object> factories() { |
110 | 112 | Set<String> factories = GenieFactoryFinder.factories(); |
111 | 113 | int len = factories.size(); |
112 | | - C.List<Object> list = C.newSizedList(factories.size()); |
| 114 | + C.Set<Object> set = C.newSet(); |
113 | 115 | if (0 == len) { |
114 | | - return list; |
| 116 | + return set; |
115 | 117 | } |
116 | 118 | ClassLoader cl = App.instance().classLoader(); |
117 | 119 | for (String className : factories) { |
118 | | - list.add($.classForName(className, cl)); |
| 120 | + set.add($.classForName(className, cl)); |
119 | 121 | } |
120 | | - return list; |
| 122 | + return set; |
121 | 123 | } |
122 | 124 |
|
123 | 125 | private Genie genie() { |
@@ -158,22 +160,26 @@ public Void apply(Class aClass, Provider provider) throws NotAppliedException, O |
158 | 160 |
|
159 | 161 | @SubClassFinder(callOn = AppEventId.DEPENDENCY_INJECTOR_LOADED) |
160 | 162 | public static void foundModule(Class<? extends Module> moduleClass) { |
161 | | - if (!isModuleAllowed(moduleClass)) { |
162 | | - return; |
163 | | - } |
164 | | - App app = App.instance(); |
165 | | - GenieInjector genieInjector = app.injector(); |
166 | | - genieInjector.addModule($.newInstance(moduleClass)); |
| 163 | + addModuleClass(moduleClass); |
| 164 | + } |
| 165 | + |
| 166 | + @SubClassFinder(callOn = AppEventId.DEPENDENCY_INJECTOR_LOADED) |
| 167 | + public static void foundConfigurator(Class<? extends AppConfigurator> configurator) { |
| 168 | + addModuleClass(configurator); |
167 | 169 | } |
168 | 170 |
|
169 | 171 | @AnnotatedClassFinder(value = ModuleTag.class, callOn = AppEventId.DEPENDENCY_INJECTOR_LOADED, noAbstract = false) |
170 | 172 | public static void foundTaggedModule(Class<?> taggedModuleClass) { |
171 | | - if (!isModuleAllowed(taggedModuleClass)) { |
| 173 | + addModuleClass(taggedModuleClass); |
| 174 | + } |
| 175 | + |
| 176 | + public static void addModuleClass(Class<?> moduleClass) { |
| 177 | + if (!isModuleAllowed(moduleClass)) { |
172 | 178 | return; |
173 | 179 | } |
174 | 180 | App app = App.instance(); |
175 | 181 | GenieInjector genieInjector = app.injector(); |
176 | | - genieInjector.addModule(taggedModuleClass); |
| 182 | + genieInjector.addModule(moduleClass); |
177 | 183 | } |
178 | 184 |
|
179 | 185 | @AnnotatedClassFinder(value = LoadValue.class, noAbstract = false, callOn = AppEventId.DEPENDENCY_INJECTOR_LOADED) |
|
0 commit comments