2017-10-29 7 views
1

Iはその中の1つの結合モジュールを持っていると仮定し、別に依存する:ここToothpickの同じモジュールから依存関係のインスタンスを渡すには?

class MyModule : Module(){ 
    init { 
    bind(SettingsStorage::class.java).to(PreferencesBasedSettingsStorage::class.java) 
    // how to use createOkHttpClient here? 
    // how to get instance of SettingsStorage to pass to it? 
    bind(OkHttpClient::class.java).to?(???) 
    } 

    private fun createOkHttpClient(settingsStorage: SettingsStorage): OkHttpClient { 
    return OkHttpClient.Builder() 
     .addNetworkInterceptor(MyInterceptor(settingsStorage)) 
     .build() 
    } 
} 

Iのみ即ちSettingsStorage、別の結合のインスタンスを有するOkHttpClientを作成することができます。しかし、それを行う方法?

現在、私は、私は単に

fun provideSessionStorage(/*...*/): SessionStorage { /* ... */ } 

fun provideOkHttpclient(sessionStorage: SessionStorage): OkHttpClient { 
    return OkHttpClient.Builder() 
    .addNetworkInterceptor(MyInterceptor(settingsStorage)) 
    .build() 
} 

など適切な引数を持つ2つのプロバイダのメソッドを作成しただろうダガーでcreateOkHttpClient()

にそれを渡すためにモジュール内結合SettingsStorageのインスタンスを取得する方法を参照してくださいませんそれ自身ですべてを把握し、sessionStorageの適切なインスタンスを2番目のプロバイダ関数に渡します。

どのようにToothpickモジュール内で同じことを達成するには?

答えて

1

それはTPと簡単です:

class MyModule : Module(){ 
    init { 
    bind(SettingsStorage::class.java).to(PreferencesBasedSettingsStorage::class.java) 
    // how to use createOkHttpClient here? 
    // how to get instance of SettingsStorage to pass to it? 
    bind(OkHttpClient::class.java).toProvider(OkHttpClientProvider::class) 
    } 
} 

、その後、あなたが(すみません、私はKotlinを使用していない)プロバイダを定義します。

class OkHttpClientProvider implements Provider<OkHttpClient> { 
    @Inject SettingsStorage settingsStorage; 
    public OkHttpClient get() { 
    return OkHttpClient.Builder() 
     .addNetworkInterceptor(MyInterceptor(settingsStorage)) 
     .build() 
    } 
} 

あなたのプロバイダがOkHttpを提供するために、第一の結合を使用します。クライアント。

+0

カスタムプロバイダクラスを使用してこれを行う方法があることがわかりました(私は質問を投稿した後:))。このように@Injectを置くと、Toothpickはこの場合にフィールド注入を自動的に行います。手動でToothpick.inject()を呼び出す必要はありませんか?私は別のオプションがコンストラクタの注入を使用するだろうと思います。 – dimsuz

+0

プロバイダはTPに自動的に挿入されます。 – Snicolas

関連する問題