So, IIUC the problem is that you need assisted inject to allow multiple
factory methods per interface?
Something like:

interface MyAssister {
   <T> createMe(..);
   <Y> createYou(..);
}

Dhanji.

On Fri, Jun 26, 2009 at 5:33 PM, Adrian Cole <[email protected]>wrote:

> jclouds is a major consumer of guice 2.0 functionality.  We pretty much use
> it for everything.  Without guice jclouds would be a lot more complex.  We
> love guice with its warts.
>
> There is one wart hard to love: issue 
> 146<http://code.google.com/p/google-guice/issues/detail?id=346>.
> When reviewing our code with new recruits, I often wince at explaining this
> one.  Currently AssistedInject is awesome for simple cases.  However,
> needing to create a separate factory per object is most certainly
> accidentaly complexity.  We end up copying and pasting code into factories
> to get this to work.  I've pasted an example below of what that looks
> like.
>
> I understand a patch is written, but not scheduled for any release.   This
> implies that this will haunt us for some time.  Unless this can make guice
> 2.1, I'd really like a second (third, ...) opinion on how to work around
> this.  I'm looking for a way to achieve multi-type assisted inject in some
> way that doesn't involve copy/pasting boilerplates or needing to compile our
> own vesion of guice.
>
> I'd like people to have a pleasant experience with guice/jclouds when they
> decide to contribute.   Any help greatly appreciated!
>
> Cheers,
> -Adrian
> jclouds <http://code.google.com/p/jclouds/>
>
>
> /**
>  * temporary factory until guice can do multi-type assisted inject
>  *
>  * @see <a href="
> http://code.google.com/p/google-guice/issues/detail?id=346"; />
>  *
>  * @author Adrian Cole
>  */
> public class CommandFactory {
>
>    @Inject
>    private ParseSaxFactory parseSaxFactory;
>
>    public static interface ParseSaxFactory {
>       ParseSax<?> create(ParseSax.HandlerWithResult<?> handler);
>    }
>
>    @Inject
>    private GetAndParseSaxFactory getAndParseSaxFactory;
>
>    public static interface GetAndParseSaxFactory {
>       GetAndParseSax<?> create(String uri, ParseSax<?> callable);
>    }
>
>    public GetAndParseSax<?> createGetAndParseSax(String uri,
> ParseSax.HandlerWithResult<?> handler) {
>       return getAndParseSaxFactory.create(uri,
> parseSaxFactory.create(handler));
>    }
>
>    @Inject
>    private GetStringFactory getStringFactory;
>
>    public static interface GetStringFactory {
>       GetString create(String uri);
>    }
>
>    public GetString createGetString(String uri) {
>       return getStringFactory.create(uri);
>    }
>
>    @Inject
>    private PutFactory putFactory;
>
>    public static interface PutFactory {
>       Put create(@Assisted("uri") String uri, @Assisted("payload") String
> payload);
>    }
>
>    public Put createPut(String uri, String payload) {
>       return putFactory.create(uri, payload);
>    }
>
>    @Inject
>    private HeadFactory headFactory;
>
>    public static interface HeadFactory {
>       Head create(String uri);
>    }
>
>    public Head createHead(String uri) {
>       return headFactory.create(uri);
>    }
>
> }
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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