Exactly, Dhanji. Thanks, -Adrian
On Sat, Jun 27, 2009 at 4:25 AM, Dhanji R. Prasanna <[email protected]>wrote: > 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 -~----------~----~----~----~------~----~------~--~---
