2017-09-18 17 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; 
    } 
} 

は短いです、私はいくつかのプロパティを設定し、カスタムエンジンを作成する必要がありますそのエンジンをCar作成の依存関係として使用することをお勧めします(モジュールの@Injectアノテーションを使用して注入することができないことを十分に認識していますが、これを単に達成したいものの参照として使用します)。

答えて

0

@Injectアノテーションを削除すれば、良い結果が得られます。 the @Provides Method User's Guide pageに記載されているとおり:

@Provides方法は@PayPalまたは@Named("Checkout")様結合注釈を持っている場合は、Guiceのは、注釈付きの型をバインドします。依存関係は、メソッドとしてパラメーターとして渡すことができます。インジェクタはメソッドを呼び出す前に、それぞれのバインディングを実行します。

+0

@Injectを削除して、依存オブジェクト、つまり車のプロバイダ内のエンジンをsysoutしようとしましたが、Imが返されました。ここの何かが欠けているように見える。 – aDiT

+0

コードを見ずにここを移動するのは難しいでしょうし、(NDAのために)実行可能なコードで同じ問題を示しているSSCCEもあります。しかし、Guiceがこれらのメソッドを呼び出すようにして、手動で '@ Provides'アノテートされたメソッドを呼び出さないようにするのは間違いありません。 –

+0

はい、Guiceがこれらのメソッドを呼び出させるようにしました。実行中のコードを更新してください。しばらく私と一緒にいらしてください。 – aDiT

関連する問題