我正在尝试使用google-gin进行字段注入,但是当我调用TestClass.test()时,注入的字段为null。我究竟做错了什么?根据文档字段注入应该是非常直接的。 ContextModule类中有什么我缺少的吗?
public class MainEntry implements EntryPoint {
private final ContextInjector injector = GWT.create(ContextInjector.class);
@Override
public void onModuleLoad() {
injector.getAppMain();
}
}
@GinModules(ContextModule.class)
public interface ContextInjector extends Ginjector {
AppMain getAppMain();
}
public class MyLogger {
}
public class ContextModule extends AbstractGinModule {
@Override
protected void configure() {
bind(MyLogger.class).in(Singleton.class);
}
}
public class AppMain {
@Inject
AppMain(MyLogger logger) {
// logger is injected properly here
new TestClass().test();
}
}
public class TestClass {
@Inject
private MyLogger logger;
public void test() {
// logger is null here!
}
}
答案 0 :(得分:2)
您的TestClass
不受GIN管理,因此GIN不会在其中注入任何内容。您必须让GIN实例化TestClass
(例如,在MyLogger
构造函数中将TestClass
更改为AppMain
,并在给定实例上调用test()
,或者询问GIN注入现有TestClass
个实例的成员(向Ginjector
添加一个以TestClass
为参数的方法,在调用时,它会注入字段和方法传入的实例)。