2014-09-25 83 views
1

我试图让字段注入工作在谷歌杜松子酒,但是当我调用TestClass.test()注入字段为空。我究竟做错了什么?根据文档字段注射应该是非常直截了当的。在ContextModule类中是否有任何缺失的东西?GWT谷歌领域注射不工作

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! 
    } 
} 
+1

为什么downvote?我怎样才能改善我的问题? – Sundae 2014-09-25 16:27:59

回答

2

TestClass不是由GIN管理,因此GIN不会注入了什么东西。你必须要么让GIN实例化TestClass(如改变MyLoggerTestClassAppMain构造函数,在给定的实例调用test()),或询问GIN注入现有的TestClass实例的成员(一个方法添加到您的Ginjector接受一个TestClass作为参数,当被调用时,它将注入传入实例的字段和方法)。

+1

谢谢你指点我正确的方向。我认为初学者的错误很明显,认为Guice /杜松子酒的魔力比实际情况要多。 – Sundae 2014-09-25 16:26:27