i can use something like this. but if i have 25 commands ?, i have to
pass 25 parameters in the constructor. ?

public class CommandProviderFactory {
        private Provider<CommandX> commandXProvider;
        private Provider<CommandY> commandYProvider;

        @Inject public CommandProviderFactory(Provider<CommandX>
commandXProvider,
                                                                  
Provider<CommandY> commandYProvider) {
        }

        public Command create(String commandName) throws Exception {
                if(commandName.equals("commandX"))
                        return commandXProvider.get();
                else if(commandName.equals("commandY"))
                        return commandYProvider.get();
                else
                        throw new Exception("command not found");
        }

}

On Apr 21, 3:35 pm, ale <[email protected]> wrote:
> Thanks Oliver.
>
> but i don't understand how assistedinject can help me.
>
> can you help me fix this example code.
>
> /* Main */
> public class Main {
>         public static class MainModule extends AbstractModule {
>                 @Override protected void configure() {
>                         
> bind(RemoteServiceX.class).to(RemoteServiceXImpl.class);
>                         
> bind(RemoteServiceY.class).to(RemoteServiceYImpl.class);
>                 }
>         }
>         public static void main(String[] args) {
>                 Injector inejector = Guice.createInjector(new MainModule());
>                 Test test = inejector.getInstance(Test.class);
>                 Command command = test.processRequest("commandX");
>                 command.execute();
>         }}
>
> public class Test {
>         public Command processRequest(String commandName) {
>                 if( commandName.equals("commandX") )
>                         return new CommandX(?); //HERE IS THE PROBLEM
>                 else if ( commandName.equals("commandX") )
>                         return new CommandY(?); //HERE IS THE PROBLEM
>                 return null;
>         }
>
> }
>
> /*      Command */
> public interface Command {
>         void execute();
>
> }
>
> public class CommandX implements Command {
>         private RemoteServiceX service;
>         private String runtimeParameter;
>
>         @Inject public CommandX(RemoteServiceX service, String
> runtimeParameter) {
>                 this.service = service;
>                 this.runtimeParameter = runtimeParameter;
>         }
>
>         @Override public void execute() { /*TODO: implements this method*/ }
>
> }
>
> public class CommandY implements Command{
>         private RemoteServiceX service;
>         private String runtimeParameter;
>
>         @Inject public CommandY(RemoteServiceX service, String
> runtimeParameter) {
>                 this.service = service;
>                 this.runtimeParameter = runtimeParameter;
>         }
>
>         @Override public void execute() { }
>
> }
>
> /* Services */
> public interface RemoteServiceX {
>         public void specificMethod1OfServiceX();
>         public void specificMethod2OfServiceX();
>
> }
>
> public class RemoteServiceXImpl implements RemoteServiceX {
>         @Override public void specificMethod1OfServiceX() {/*TODO: implements
> this method*/}
>         @Override public void specificMethod2OfServiceX() {/*TODO: implements
> this method*/}
>
> }
>
> public interface RemoteServiceY {
>         public void specificMethod1OfServiceY();
>         public void specificMethod2OfServiceY();
>
> }
>
> public class RemoteServiceYImpl implements RemoteServiceY {
>         @Override public void specificMethod1OfServiceY() {/*TODO: implements
> this method*/}
>         @Override public void specificMethod2OfServiceY() {/*TODO: implements
> this method*/}
>
> }
>
> On Apr 21, 1:38 pm, Olivier Grégoire <[email protected]> wrote:
>
> > Hello,
>
> > You must create a factory instead of using a Provider. To help you, the
> > extension AssistedInject exists.
>
> > More details in the 
> > wiki:http://code.google.com/p/google-guice/wiki/AssistedInject
>
> > Regards,
> > Olivier
>
> > 2009/4/21 ale <[email protected]>
>
> > > How can i do this.?
>
> > > public class CommandProvider implements Provider<Command> {
>
> > >        public Command get(runtimeValue1, runtimeValue2) {
>
> > >                if(runtimeValue1.equals( "commandX" )) {
>
> > >                        return new FooCommandX( runtimeValue2 );
>
> > >                } else if (runtimeValue1.equals( "commandY" )) {
>
> > >                        return new FooCommandY(runtimeValue2);
>
> > >                } else if (runtimeValue1.equals( "commandZ" )) {
>
> > >                        return new FooCommandZ(runtimeValue2);
>
> > >                } else {
> > >                    throw new RuntimeException("...."); //For this i
> > > know that i should use ThrowingProviders.
> > >                }
>
> > >        }
>
> > > }
>
> > > Thanks.
>
> > --
> > Olivier Grégoire
> > Boulevard De Smet De Naeyer 627A
> > 1020 Bruxelles
> > Tél: +32.486.74.09.49
--~--~---------~--~----~------------~-------~--~----~
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