First, here's a unit test for the issue
:https://gist.github.com/electrotype/5105100
I'm trying to use a listener to call an "init()" method on my classes when
they are constructed. I also use AssistedInject factories.
I think the problem is that in *
com.google.inject.internal.ConstructorInjector#construct(...)* , this code
is supposed to prevent infinite loops :
T t = constructionContext.getCurrentReference();
> if (t != null) {
> return t;
> }
>
To remove the "current reference", *removeCurrentReference()* is called in
the *finally* clause :
} finally {
> constructionContext.removeCurrentReference();
> }
>
The problem is that before this removal method is called, *the listeners
are called* :
membersInjector.notifyListeners(t, errors);
>
It seems that this is the root of my issue, because the reference still
exists when my "init()" methods are called (via the listeners), so when
they try to create an instance using the factories, they get the cached
instance instead of a new one!
Does this mean I can't use a listener to call my init() methods? Are there
some workarounds?
Thanks in advance!
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.