What is happening is that all variables defined in a script are local to the
scripts run() method. Therefore, your "@Inject Screen screen" will never get
injected. Essentially, that script compiles to this:
public class MyScript extends GroovyScript {
public void run(String... args) {
@Inject Screen screen;
if(screen != null) {
println "We have one!"
} else {
println "There is no screen :("
}
}
}
There are a couple of ways to get around this:
1) You can use the new annotations in Groovy 1.8 that make script variables
members or static. I think these annotations are part of Groovy 1.8, but don't
take my word on that. I think these look like this:
@Member @Inject Screen screen
@Static @Inject Screen screen
2) You can perform some AST to move the variables from the run() method to the
class as an instance variable or static variable
I went with #2 since I didn't have access to the annotations.
-bp
On Feb 19, 2011, at 6:02 PM, Christopher Piggott wrote:
> Hi,
>
> I want to inject things into Groovy scripts, but would prefer to
> create them without groovy-guice if possible. My java code looks like
> this:
>
> final Class groovyClass = gcl.parseClass(someFile);
>
> Injector childInjector =
> mainInjector.createChildInjector(new AbstractModule() {
>
> @Override
> protected void configure() {
> requestStaticInjection(groovyClass);
> }
> });
>
>
> String[] args = {};
> Class[] argTypes = {args.getClass()};
> Object passedArgv[] = {args};
> Method m = groovyClass.getMethod("main", argTypes);
> m.invoke(groovyClass, passedArgv);
>
>
> my groovy looks like:
>
> @Inject Screen screen;
>
> if(screen != null) {
> println "We have one!"
> } else {
> println "There is no screen :("
> }
>
> I think this should work ... I believe that Screen is implicitly
> static and that requestStaticInjection should cause it to be injected
> at the time I create the child injector. However, it doesn't seem to
> be working.
>
> I realize this is stuck somewhere between a groovy question and a
> guice question but I think it's closer to guice since the groovy class
> is just a class (once compiled by the guts underneath
> GroovyClassLoader).
>
> What's wrong?
>
> --Chris
>
> --
> 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.
>
--
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.