I read the bug report and the longer discussion. That singletons are
classloader-wide does seem wrong (reminds me of the many woes caused by the
AWT tree lock).
Seems like the bug is the fact that Scopes.SINGLETON is a static field (not
a small amount of irony to that in Guice :-)). I mean, effectively,
there's no difference between synchronized(Injector.class) and
synchronized("foo") - either is a handy public field that was lying around
and able to be a monitor; using Injector.class is just slightly less
obviously evil.
Otherwise you could have a "singleton with respect to this injector and its
parents" (or just this injector) scope that was private to the injector and
expose it via an instance method on, say, AbstractModule (still need a way
to expose it to those who implement Module directly, though) - which would
function identically to the situation now, except that two unrelated
injectors could not interfere with each other.
bind(Foo.class).in(singletonScope()); There just needs to be a way to
give child injectors a reference to the parent injector's lock.
-Tim
--
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.
For more options, visit https://groups.google.com/groups/opt_out.