I just look at this briefly maybe a long-shot but it can't hurt. Maybe
this code will give you some idea. It uses Guice 2.

http://pastie.org/453944

Cheers,
Alen


On Apr 21, 10:13 pm, ale <[email protected]> wrote:
> 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