2017-05-30 11 views
1

私はAndroidアプリケーションに新しいインスタントアプリケーション機能を実装しようとしています。 push インスタントアプリケーション:依存関係のない基本モジュールのフィーチャモジュールを使用する

  • インストール済みのアプリモジュール:installed
  • インスタントアプリモジュール:instant
  • プッシュ通知クラスと base
  • 機能モジュール:すべての活動とロジックと

    • 基本機能モジュール:私は4つのモジュールを持っています

    インスタントアプリケーションはプッシュ通知をサポートしていないため、pushモジュールをi専用に有効にするインストールされたアプリ。しかし、私はbaseにあるpushメソッドを呼び出すクラスを共有しています。たとえば、アプリケーションの起動時にApplicationクラスでpushモジュールを初期化します。

    どのように私は依存関係を整理しないので、私はbaseモジュールへpushモジュールを含める必要はありませんが、baseからpushメソッドを呼び出すことができること? baseモジュールにPushManagerProviderというインターフェースを作成できるというアイデアがありますので、instantinstalledは独自の実装を提供できますが、具体的な実装方法は現在のモジュールによってはbaseにどのように注入できるのかよくわかりません。

  • 答えて

    2

    daggerを使用し、Applicationクラスにシングルトンコンポーネントを作成すると仮定すると、ここに1つのアプローチがあります。

    baseには、@Componentクラスが拡張するInjectorインターフェイスを定義します。基本モジュールのアプリケーションに、getInjector()メソッドを持つInjectorProviderインターフェイスを実装して、構築したコンポーネントを返すようにしてください。そのコンポーネントは、no-op PushManagerProviderを提供するモジュールを使用して構築されます。あなたpushモジュールに続い

    、あなたApplicationクラスの別の実装を作成します(あなたのベースを拡張し、PushAwareApplicationにリネーム?)合法PushManagerProviderを提供短剣モジュールを使用してコンポーネントを作成し、新規の使用を強制するためにmerge rulesを使用PushAwareApplicationアプリケーションモジュールにプッシュが組み込まれている場合、その名前。

    この方法であなたは

    ((InjectorProvider)getApplication()).getInjector().inject(this); 
    

    を呼び出し、あなたがインストールアプリやインスタントアプリを構築しているかどうかに応じて、異なるコンポーネントの実装を取得することができます。

    ダガーでこれを行う方法はおそらくもっと正しいでしょうが、これはあなたを始めなければなりません。

    ダガーを使用していない場合は、両方のアプリケーション実装で 'getPushManagerProvider()'メソッドを提供する前述の同じアプリケーションオーバーライド手法を使用できます。

    関連する問題