You can check this project out - it lists a specific adaptation of
JCommander to Guice. The read me has most of the instructions here:
https://github.com/israfil/jcommander-inject/tree/master/guice
A quit summary is:
You create your Parameters object, say:
class Arg {
@Parameter(names = "-long")
public Long l;
}
And then you can call
Module m =
JCommanderModuleBuilder.bindParameters(Arg.class).withArguments(args).build();
then create your injector using that module. You can then inject your
classes either by directly depending on Arg, or by @Named typed
arguments, like
class MyClass {
@Inject MyClass(@Named("long") Long long) {
}
}
The module builder will create a module which binds all the arguments
into named bindings, which you can inject in your classes
JCommander also uses Guice's custom injection annotation approach, but I
find that a little cumbersome, so I whipped up this. Either way.
cheers,
Christian.
On 15 Nov 2013, at 21:17, Maatary Okouya wrote:
Many thanks for your answer, appreciated.
Although i might have forgot to mention that i'm new to guice and what
you
wrote does not make much sense in my body of knowledge.
I personally come up with a solution in the mean time that i do not
like so
much but still work. I use the assisted inject framework.
I saw that this is what is recommended because with provider you can
only
set information that you know in advance, not things that you get at
runtime. In the faq of google guice they seem to recommand the use of
assisted inject as well. But i find it so cumbersome. The only
advantage is
that the factory is generated for you. It feels like an over kills
With respect to your exemple, please do you mind assisting me a bit
further
by connecting the dots please: I don't see any provider created, the
corresponding module that will contain it, how you will initialize the
module and call for your instance and etc....
On Saturday, November 16, 2013 4:43:06 AM UTC+1, Cédric Beust ♔
wrote:
I suggest using a provider and the awesome (obviously) JCommander
library<http://jcommander.org>
.
class Main {
private Arg arg = new Arg();
public static void main(String[] args) throws Exception {
class Arg {
@Parameter(names = "-long")
public long l;
}
new JCommander(arg).parse("-lon", "32");
}
@Provider
public Arg getArg() {
return arg;
}
}
then simply
@Injectprivate Arg arg;
--
Cédric
--
Cédric
On Fri, Nov 15, 2013 at 6:21 PM, Maatary Okouya
<[email protected]<javascript:>
wrote:
I have an object in my application that need to be created with
parameter
from the command line.
E.g. I have the object Infrastructure service which is a singleton
object. When i need to create it, i have to supply it with a
concurrent
hashmap and paramters either coming from the the command line or the
GUI.
The hasmap is provided by the Gui, it shares it with the
infrastructure.
I was wondering what would be the best approach for such case. The
immediate approach i have in mind, is a factory to which those
parameter
are passed, and will be used to create the infrastructure let say
from the
Gui.
Any suggestion, am i seeing the problem the wrong way ? Is guice
useful
in that case, if yes how.
Many thanks,
Maatary
--
You received this message because you are subscribed to the Google
Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it,
send an
email to [email protected] <javascript:>.
To post to this group, send email to
[email protected]<javascript:>
.
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google
Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.
Christian Gruber :: Google, Inc. :: Java Core Libraries :: Dependency
Injection
email: [email protected] :::: mobile: +1 (646) 807-9839
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.