Yep, working fine now, thanks Alen. This is my second week of Guice, expect more silly questions :-)
2008/10/20 Andrew Clegg <[EMAIL PROTECTED]>: > Aah! I didn't realise you could do that. I thought providers just > worked like this: > > // module > bind( MyClass.class ).toProvider( MyClassProvider.class ); > > // logic > @Inject MyClass myClass; // Guice calls MyClassProvider#get() here > behind the scenes > > I hadn't worked out that you can bind *to* a provider and then inject > the Provider interface instead of the class it provides. > > Thanks, I'll give it a go that way. > > Andrew. > > 2008/10/20 Alen Vrečko <[EMAIL PROTECTED]>: >> >> I don't get it:) >> >> //in config >> bind(DispatchHandler.class).toProvider(SoapDispatchHandlerProvider.class); >> >> //in your logic class >> public class Foo{ >> >> @Inject >> Provider<DispatchHandler> myProvider; >> >> public void bar(SomeObject... oes){ >> for( SomeObject o : oes) >> { >> DispatchHandler h = myProvider.get(); >> // Send o to h ... >> >> } >> >> } >> >> is this not what you want? >> >> Cheers, >> Alen >> >> On 20 okt., 14:31, "Andrew Clegg" <[EMAIL PROTECTED]> wrote: >>> I needed to inject the provider so I can do things like... >>> >>> for( SomeObject o : anArray ) >>> { >>> DispatchHandler h = myProvider.get(); >>> // Send o to h ... >>> >>> } >>> >>> I don't think there's currently a better way to do this is there? >>> >>> Andrew. >>> >>> 2008/10/20 Alen Vrečko <[EMAIL PROTECTED]>: >>> >>> >>> >>> > I don't think you shuld be conserning yourself with binding provider >>> > directly. >>> >>> > bind(DispatchHandler.class).toProvider(SoapDispatchHandlerProvider.class); >>> >>> > now if you do >>> >>> > @Inject >>> > Provider<DispatchHandler> handler; >>> >>> > Guice will use SoapDispatchHandlerProvider. Hope it helps. >>> >>> > Cheers, >>> > Alen >>> >>> > On 20 okt., 13:04, "Andrew Clegg" <[EMAIL PROTECTED]> wrote: >>> >> Morning folks, >>> >>> >> I have a custom provider for creating SoapDispatchHandler objects, >>> >> which implement an interface called DispatchHandler. >>> >>> >> I want to set up a binding in my module such that any reference to >>> >> Provider<DispatchHandler> is injected with an instance of >>> >> SoapDispatchHandlerProvider, the provider class which builds and >>> >> returns SoapDispatchHandler objects. (Needless to say, >>> >> SoapDispatchHandlerProvider implements Provider<DispatchHandler>.) >>> >>> >> I originally did it like this: >>> >>> >> bind( new TypeLiteral<Provider<DispatchHandler>>(){} ) >>> >> .to( SoapDispatchHandlerProvider.class ); >>> >>> >> but this gives me an error: >>> >>> >> Binding to core guice framework type is not allowed: Provider. >>> >>> >> So to work around it I created an empty interface like so: >>> >>> >> public interface DispatchHandlerProvider extends >>> >> Provider<DispatchHandler> {} >>> >>> >> and then made SoapDispatchHandlerProvider implement >>> >> DispatchHandlerProvider instead of directly implementing >>> >> Provider<DispatchHandler>. This works; I can go: >>> >>> >> bind( DispatchHandlerProvider.class ).to( >>> >> SoapDispatchHandlerProvider.class ); >>> >>> >> without any problems. But I can't help feeling empty interfaces smell >>> >> a bit funny. Is this the right way to approach this scenario? >>> >>> >> 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 -~----------~----~----~----~------~----~------~--~---