Sorry, incomplete example... You'd then have to call
Game game = injector.getInstance(Game.class); On Mon, Sep 28, 2009 at 1:31 PM, Brandon Atkinson < [email protected]> wrote: > Hi, > > I think the problem is that your annotation is outside any scope that the > injector can see. > > You are calling: > > @Good Player player = injector.getInstance(Player.class); > > Because Player.class doesn't have an injection point annotated with @Good > or @Bad, and you only put mappings for @Good and @Bad in your module, Guice > will look for a no arg constructor for a concrete Player class, which you > have not provided, because Player is an interface. > > If you were to change your example to something like > > class Game { > private Player player; > > @Inject public Game(@Good Player player) { > player=this.player; > } > } > > I don't think you would not see this error. > > -Brandon > > > On Mon, Sep 28, 2009 at 5:00 AM, delightwjk <[email protected]> wrote: > >> >> Hi All, >> >> I'm just starting to play with Guice - the beautiful lightweight DI >> framework, I encountered a simple problem, didn't find answer over >> internet, I guess someone here can help me, thanks very much in >> advance. >> >> I have several Java files: >> >> ================================ >> Player.java - The interface that I defined. >> ================================ >> package net.jiakuan.test.sample4; >> >> public interface Player { >> public void bat(); >> >> public void bowl(); >> } >> >> >> ================================ >> GoodPlayer.java >> ================================ >> package net.jiakuan.test.sample4; >> >> public class GoodPlayer implements Player { >> public void bat() { >> System.out.println("I can hit any ball"); >> } >> >> public void bowl() { >> System.out.println("I can also bowl"); >> } >> } >> >> >> ================================ >> BadPlayer.java >> ================================ >> package net.jiakuan.test.sample4; >> >> public class BadPlayer implements Player { >> public void bat() { >> System.out.println("I think i can face the ball"); >> } >> >> public void bowl() { >> System.out.println("I dont know bowling"); >> } >> } >> >> >> ================================ >> Good.java >> ================================ >> package net.jiakuan.test.sample4; >> >> import java.lang.annotation.ElementType; >> import java.lang.annotation.Retention; >> import java.lang.annotation.RetentionPolicy; >> import java.lang.annotation.Target; >> >> import com.google.inject.BindingAnnotation; >> >> @BindingAnnotation >> @Retention(RetentionPolicy.RUNTIME) >> @Target(ElementType.LOCAL_VARIABLE) >> public @interface Good { >> } >> >> >> ================================ >> Bad.java >> ================================ >> package net.jiakuan.test.sample4; >> >> import java.lang.annotation.ElementType; >> import java.lang.annotation.Retention; >> import java.lang.annotation.RetentionPolicy; >> import java.lang.annotation.Target; >> >> import com.google.inject.BindingAnnotation; >> >> @Retention(RetentionPolicy.RUNTIME) >> @BindingAnnotation >> @Target(ElementType.LOCAL_VARIABLE) >> public @interface Bad { >> } >> >> >> ================================ >> PlayerModule.java >> ================================ >> package net.jiakuan.test.sample4; >> >> import com.google.inject.Binder; >> import com.google.inject.Module; >> >> public class PlayerModule implements Module { >> public void configure(Binder binder) { >> binder.bind(Player.class).annotatedWith(Good.class) >> .to(GoodPlayer.class); >> binder.bind(Player.class).annotatedWith(Bad.class).to >> (BadPlayer.class); >> } >> } >> >> >> ================================ >> PlayerClient.java >> ================================ >> package net.jiakuan.test.sample4; >> >> import com.google.inject.Guice; >> import com.google.inject.Injector; >> import com.google.inject.Module; >> >> public class PlayerClient { >> public static void main(String[] args) { >> PlayerModule module = new PlayerModule(); >> Injector injector = Guice.createInjector(new Module[] { module }); >> >> @Good >> Player player = injector.getInstance(Player.class); >> player.bat(); >> player.bowl(); >> } >> } >> >> When I ran PlayerClient, the following error message was printed in >> console, I could not find what was wrong with my code: >> >> ---------------------------------------------------------------------------------------------------------------------------------------------- >> Exception in thread "main" com.google.inject.ConfigurationException: >> Guice configuration errors: >> >> 1) No implementation for net.jiakuan.test.sample4.Player was bound. >> while locating net.jiakuan.test.sample4.Player >> >> 1 error >> at >> com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:784) >> at >> com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:743) >> at >> com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:793) >> at net.jiakuan.test.sample4.PlayerClient.main(PlayerClient.java:18) >> >> ---------------------------------------------------------------------------------------------------------------------------------------------- >> Anyone can help me? thanks in advance. >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
