More listener changes:
- we now support user-supplied MembersInjectors. These execute before InjectionListeners, enabling a two-phase injection
- renamed InjectableTypeListenerBinding to TypeListenerBinding
git-svn-id: https://google-guice.googlecode.com/svn/trunk@927 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/src/com/google/inject/EncounterImpl.java b/src/com/google/inject/EncounterImpl.java
index 468ee42..33f462e 100644
--- a/src/com/google/inject/EncounterImpl.java
+++ b/src/com/google/inject/EncounterImpl.java
@@ -36,6 +36,7 @@
private final Errors errors;
private final Lookups lookups;
+ private List<MembersInjector<? super T>> membersInjectors; // lazy
private List<InjectionListener<? super T>> injectionListeners; // lazy
private List<MethodAspect> aspects; // lazy
private boolean valid = true;
@@ -55,13 +56,28 @@
: ImmutableList.copyOf(aspects);
}
+ public ImmutableList<MembersInjector<? super T>> getMembersInjectors() {
+ return membersInjectors == null
+ ? ImmutableList.<MembersInjector<? super T>>of()
+ : ImmutableList.copyOf(membersInjectors);
+ }
+
public ImmutableList<InjectionListener<? super T>> getInjectionListeners() {
return injectionListeners == null
? ImmutableList.<InjectionListener<? super T>>of()
: ImmutableList.copyOf(injectionListeners);
}
- @SuppressWarnings("unchecked") // an InjectionListener<? super T> is an InjectionListener<T>
+ public void register(MembersInjector<? super T> membersInjector) {
+ checkState(valid, "Encounters may not be used after hear() returns.");
+
+ if (membersInjectors == null) {
+ membersInjectors = Lists.newArrayList();
+ }
+
+ membersInjectors.add(membersInjector);
+ }
+
public void register(InjectionListener<? super T> injectionListener) {
checkState(valid, "Encounters may not be used after hear() returns.");