2017-09-18 127 views
0

我有一个模块,我在其中创建一个提供程序,并且该提供程序需要作为另一个提供程序在同一模块中的依赖项。但是,这对我的设置目前不可行。我该如何解决这个问题?还应该注意的是,所有的依赖都是第三方库,所以我相信我不应该在我的模块中绑定这个(根据我读过的)。Guice:依赖注入@provides提供程序

不幸的是,由于NDA我不能提供实际的代码,而是依赖层次的例子可以在下面看到:

public MyModule extends AbstractModule { 
    @Override 
    protected void configure() {} 

    @Singleton 
    @Provides 
    public Engine provideEngine(){ 
     Map<String, String> engineProperties = new HashMap<>(); 
     engineProperties.put("brand", "some brand"); 
     engineProperties.put("capacity", "2.6 litres"); 
     return new Engine(engineProperties); 
    } 

    @Inject 
    @Provides 
    public Car provideCar(Engine engine){ 
     Car car = new Car(engine); 
     return car; 
    } 
} 

是短暂的,我需要创建一个自定义的发动机,设立一些属性然后使用该引擎作为汽车创建的依赖项(请注意,我完全知道我无法在模块中使用@Inject注释注入,但是,我只是将其作为参考以引用我想要实现的内容)。

回答

0

删除@Inject注释,你应该很好。如在the @Provides Method User's Guide page列出:

如果@Provides方法具有像@PayPal@Named("Checkout")结合注释,吉斯结合注释类型。依赖关系可以作为参数传递给方法。在调用该方法之前,注射器将为每个注射器执行绑定。

+0

我删除了@Inject,并尝试系统化依赖对象,即汽车提供商内的引擎,并且返回空值。似乎我在这里错过了一些东西。 – aDiT

+0

如果没有看到你的代码,或者(对于NDA来说)一个在可运行代码中显示相同问题的SSCCE,将很难移动到这里。不过,要清楚的是,你*会让Guice调用这些方法,而不是手动调用任何'@Proced'-annotated方法,对吧? –

+0

是的,我让Guice调用这些方法。我会用正在运行的代码更新这些代码,请稍等片刻。 – aDiT