2017-11-21 16 views
0

私は多くの@Providesメソッドを持つ@Moduleクラスを持っています。私の@Componentは、このModuleクラスに依存します。例:Dagger2はオブジェクトを初期化していませんか?

@Singleton 
@Component(modules = { MyModule.class}) 
public interface MyComponent { 

    ObjectA getObjectA(); 

    ObjectB getObjectB(); 

} 

@Module 
public class MyModule { 

    @Provides 
    @Singleton 
    ObjectC provideObjectC() { 
     return new ObjectC(); 
    } 

    @Provides 
    @Singleton 
    ObjectD provideObjectD() { 
     return new ObjectD(); 
    } 

    @Provides 
    @Singleton 
    ObjectA provideObjectA(ObjectC objectC) { 
     return new ObjectA(objectC);  
    } 

    @Provides 
    @Singleton 
    ObjectB provideObjectB(ObjectD objectD) { 
     return new ObjectB(objectD);  
    } 
} 

私はダガービルダを使用してコンポーネントのインスタンスを作成し、MyModuleというの新しいインスタンスを提供しています。私がmyComponent.getObjectA()を呼び出すだけでObjectB(およびその依存関係)も構築されるのでしょうか?

答えて

1

私がログに記録したコードの手動テストを参照してください。インジェクションでObjetAのみを使用するとObjectAとObjectCが作成されますが、ObjectBまたはObjectDは作成されません。

+0

あなたが提供したコードは、Daggerを使用する標準的な方法に実際に従っているわけではありません。プロバイダメソッドを手動で呼び出すべきではありません。 –

+0

私は質問を反映し、将来の混乱を避けるために質問を更新しました。質問は実際にはオブジェクトの注入についてではなく、完全に使用されていないオブジェクトに関するものでした。 – emilyk

0

私はDaggerを使用して以来、しばらくしていますが、正しく動作するには、それらをパラメータとして指定する必要があります。これは、他のプロバイダメソッドを呼び出して、シングルトンインスタンスを取得することを管理します。

@Provides 
@Singleton 
ObjectB provideObjectB(ObjectD objectD) { 
    return new ObjectB(objectD); 
} 

さもないと、あなたはまた、注入されたコンストラクタとして、それを指定することができます。 Dagger 2 injecting parameters of constructor

+0

ありがとうございます。しかし、それは私が質問で探していたものには全く答えません。そのパターンでも、Componentインターフェイスで呼び出されないオブジェクトを作成しますか? – emilyk

+0

はい、申し訳ありませんが、私はより明確にすべきでした。それは、内部的に、あなたの他のプロバイダ関数を呼び出します。 –

関連する問題