問題タブ [dagger-2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Dagger 2 を使用した Android 単体テスト
依存性注入に Dagger 2 を使用する Android アプリがあります。また、単体テスト用のビルド バリアントとインストルメンテーション テスト用のビルド バリアントを許可する最新の gradle ビルド ツールも使用しています。私はjava.util.Random
自分のアプリで使用していますが、これをテスト用にモックしたいと考えています。私がテストしているクラスは Android のものを使用していないため、通常の Java クラスです。
私のメイン コードComponent
では、クラスを拡張するクラスでを定義していますApplication
が、単体テストでは . を使用していませんApplication
。Module
テストと を定義しようとしましComponent
たが、Dagger は . を生成しませんComponent
。また、アプリケーションで定義した を使用して、ビルド時に をComponent
交換しようとしましたが、アプリケーションにはテスト クラスのメソッドがありません。テスト用のモック実装を提供するにはどうすればよいですか?Module
Component
inject
Random
サンプルコードは次のとおりです。
応用:
モジュール:
テストの基本クラス:
また:
テスト モジュール:
android - ダガー 2 基底クラスの注射
Dagger 1 では、スコープ グラフの作成と現在のオブジェクトへの依存関係の注入を処理する基本クラスのセットアップがありました。例えば...
これにより、各サブクラスは、標準のアプリケーション モジュールに加えて、独自のモジュール セットを補足することができました。
Dagger 2 で遊んだ後、同様のシナリオを処理することはできないようです...
MyBaseActivityComponent を変更して、使用可能なすべてのモジュールをリストするように上記を回避しました...
だから今、私はこのようなことをすることができます...
しかし今、注入が MyBaseActivity の依存関係を注入するが、サブクラスではないという問題があります。提案?
java - 短剣 2 循環依存
私が取り組んでいるプロジェクトでは、互いに大きく依存している 2 つのクラスがあります。
アイデアは、作業を実行するときに、作業が複数のサービスにアクセスできるというものです。そのうちの 1 つはエグゼキュータ自体であるため、作業はサブ作業を実行できます。
ご覧のとおり、ここには循環依存関係がありますが、これを断ち切るのは非常に困難であることがわかりました。
主な問題は、 WorkExecutor が実際にはグラフ作成時に ExecutionServices オブジェクトのインスタンスを必要とせず、後で使用するプロバイダーのみを必要とすることです。悲しいことに、Dagger は、WorkExecutor がクラスのコンストラクターから ExecutionServices プロバイダーを呼び出さないことを認識していないため、ExecutionServices が WorkExecutor に依存していると推測し、その逆も同様です。
私が見つけた解決策の 1 つは、モジュールとコンポーネントを次のように定義することです。
そして、元のクラスを次のように変更します。
そして、アプリを作成するには、次のことを行う必要があります。
しかし、これが適切な行動方針であるかどうかはわかりません。より良い方法はありますか?
android - メソッドに依存関係を挿入するにはどうすればよいですか?
私は依存性注入の初心者です..特にDagger 2.私は次のようなことができるかどうか/どのようにできるかを理解しようとしています:
または、その依存関係をクラス変数として入れる必要がありますか? これについての助けをいただければ幸いです。また、この場合、変数 someInteger は依存関係ではありませんが、呼び出し元によって追加されています...それは問題ですか?
私はこのようにそれを呼び出すことができます:
Androidスタジオは上記の呼び出し方法が好きではありません(何か間違ったことをしているので推測しています)
android - Dagger 2 と Android Annotations は連携しますか?
Android Annotations が Dagger (1) で動作するように更新されたことをここで読みましたが、Dagger 2 にも自動的に適用されるかどうかはわかりません。
AA と Dagger 2 を一緒に使っている人はいますか?
ありがとう。
java - @Singleton in dagger 2スレッドセーフですか?
アプリ内のすべてをシングルトンから遠ざけようとしています。これはプログラミングの悪い慣行であることに気付いたからです。そうは言っても、Dagger 2 依存性注入の実装を検討しています。そして、Dagger 2 で @Singleton を実行すると、そのスレッドは同期されますか? そうでない場合はどうすれば同期できるので、同じものに触れている複数のスレッドから奇妙なデータ異常が発生することはありません。
次のようなことをする前にシングルトンを作成していたとき:
同期されている限り、Dagger 2 @Singleton は同等ですか?
java - Android での Dagger2 による依存性注入
現在、私は依存性注入のファンではありませんが、試してみたいと思っています。
これは私が持っているものです:
ここで、Facebook の CallbackManager を注入したいと思います。では始めましょう。
私はたくさんの新しいクラスを作成しました...本当に?開発者の生活を楽にするために、もっと多くのコードを書かなければなりませんか? :-(
この新しいクラスで、Activity を次のように変更しました。
しかし、うまくいきません。callbackManager
は常に null です。
これの何が問題なのですか?