2016-12-09 5 views
1

dagger-2でそれを行うことさえ可能なら、私はそれを理解しようとしてきました。抽象的な別のJARファイルのモジュール

このモジュールは、、独自のMavenアーティファクト(それは共通ライブラリです)今

、あなたのメインプログラムで配布されて

@Module 
public abstract class BaseModule<A> { 
    [...] 
    @Provides 
    @Singleton 
    A provideA() { 
    return [...] 
    } 
} 

のは(それがジェネリックを使用しているため)あなたは抽象モジュールを持っているとしましょうそれは、ライブラリの実装は、そのような何かをやっていることを使用しています。

class ImplModule extends BaseModule<Foo> { 
    [...] 
} 

public class Main() { 
    @Component(modules = ImplModule.class) 
    interface AwesomeComponent { 
    @Singleton Foo foo(); 
    } 

    [...] 
    AwesomeComponent component = DaggerAwesomeComponent.builder().build(); 

    // do something with component.foo() 
} 

ImplModuleをBaseModuleと同じMavenアーティファクトに移動すると、すべてが魅力的に機能します。

ImplModuleが主要なアプリケーションメイカーのアーティファクトにある場合、私はdagger2から次のようにコンパイルエラーを受け取ります。 "@ Provides-annotatedメソッドなしでFooを提供することはできません。

私はMavenで何かをすべて忘れているように感じますが、私はそれを理解できません。

+0

メインアプリケーションはダガーコンパイラも実行しますか?これは、通常、私のアプリケーションにいくつかのモジュールを持っているときに追加することを忘れているものです。すべてのコンパイラを実行する必要があります。 – Fred

答えて

0

私は最後にそれを理解しました。 抽象クラスのプロバイダは、他のパッケージの実装からは見えませんでした。

私はそれを保護し、それ以降はすべてがクールでした。

関連する問題