Oh, Jesse also has AssistedInject which can help with this stuff, but I
still like to kick it old school. He can tell you more.

Bob

On Thu, Oct 16, 2008 at 9:16 AM, Bob Lee <[EMAIL PROTECTED]> wrote:

> Assuming you need to inject stuff into DispatchHandler and you don't want
> Dispatcher to know about DispatchHandler's deps, here's how I would do it.
>
> public class Dispatcher {
>
>   private final DispatchHandler.Factory handlerFactory;
>
>   // package-private for unit testing
>   @Inject Dispatcher(DispatchHandler.Factory handlerFactory) {
>     this.handlerFactory = handlerFactory;
>   }
>
>   ...
>
>   public boolean dispatch() {
>     for(PredictorProfile predictor : predictors) {
>       handlerFactory.newInstance(predictor).start();
>     }
>     return true;
>   }
> }
>
> public class DispatchHandler extends Thread {
>
>   private DispatchHandler(PredictorProfile predictor, Dep1 d1, ...) { ... }
>
>   ...
>
>   public static class Factory {
>
>     private final Dep1 d1;
>     ...
>
>     // package-private so we can unit test easily.
>     @Inject Factory(Dep1 d1, ...) { ... }
>
>     ...
>
>     public DispatchHandler newInstance(PredictorProfile predictor) {
>       return new DispatchHandler(predictor, d1, ...);
>     }
>   }
> }
>
> You could also use "Builder" instead of "Factory" depending on how you
> structure things. Needing this additional class is unfortunate but necessary
> unless we extend the language to better support this stuff.
>
> Bob
>
>
> On Thu, Oct 16, 2008 at 9:02 AM, Andrew Clegg <[EMAIL PROTECTED]>wrote:
>
>>
>> Hey folks,
>>
>> I'm just getting started with Guice (and DI in general). I have a
>> question, hope it's not too dense.
>>
>> I have a method that looks something like this in its first
>> incarnation (_predictors is a collection):
>>
>>    public boolean dispatch()
>>    {
>>        for( PredictorProfile predictor : _predictors )
>>        {
>>            Thread handler = new DispatchHandler( predictor );
>>            handler.run();
>>        }
>>        return true;
>>    }
>>
>> i.e. for each predictor that the object knows about, kick off a thread
>> to process it, and then return. (The return true is just a placeholder
>> for a proper status code later.)
>>
>> Now I've started to think Guicily, I don't like the look of that call
>> to new. Everything else in this app so far is injected for me by
>> Guice.
>>
>> What's the best pattern for this kind of situation?
>>
>> Thanks!
>>
>> Andrew.
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to google-guice@googlegroups.com
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