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