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.

Reply via email to