2013-10-10 169 views
0
public class N extends R { 

    private final A a; 
    private B b; 

    @Inject 
    N(@Assisted final A a, final B b) { 
     a= a; 
     b= b; 
    } 
} 

我对此的理解是我将提供的参数“a”以及Guice依赖注入器将负责注入“b”是否正确?我是否需要为guice注入“b”添加注释,如何注入“b”?Guice中的依赖注入

回答

3

Guice将根据您在Module中的配置方式注入B。您不需要添加@Inject以外的其他任何东西(您已拥有)。这里有你的类更完整的示例建筑:

public class GuiceExample { 

    static class N { 
    private final A a; 
    private B b; 

    @Inject 
    N(@Assisted final A a, final B b) { 
     this.a = a; 
     this.b = b; 
    } 
    } 

    static class A {} 
    static class B {} 

    static interface NFactory { 
    public N create(A a); 
    } 

    static class Module extends AbstractModule { 
    @Override 
    protected void configure() { 
     install(new FactoryModuleBuilder().implement(A.class, A.class).build(NFactory.class)); 
     bind(B.class); // Or however you want B to be bound... 
    } 
    } 

    @Test 
    public void test() { 
    Injector i = Guice.createInjector(new Module()); 
    N n = i.getInstance(NFactory.class).create(new A()); 
    } 

} 

你应该在你configure方法绑定B你认为合适的。并且您将NFactory注入您需要从A s生产N s的课程中。