No offense, IMHO, what you're trying to do just smells bad. There's a
unnecessary coupling of these classes causing these gyrations that I can't
put my finger on. I'm swapping one runtime instance for another easily way
down in dependency chains just by using sub-classes of Provider and .get().
D is the wonky one, so maybe this will lead somewhere....(typing freehand
so..)
public class DProvider implements Provider<D> {
private AtomicReference<D> currentD = new AtomicReference<D>(null);
@Inject
public DProvider(Whatever dNeeds) { .. }
public D get() {
if (currentD.get() != null) {
return currentD.get();
}
D oldD = currentD.get();
oldD.releaseResources();
D newD = createDBasedOnWhateverRuntimeCriteria();
currendD.set(newD);
return newD;
}
Anyone requiring an instance of D, regardless of position in the dependency
chain, gets DProvider injected. As long as they get their D instance via
injectedDProvider.get() anytime they access a method of D, they're certain
to get whatever runtime instance you've swapped in/out.
Hope this helps. Took a shot. :-D
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en.