問題タブ [dagger]
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.
android - Dagger 1.x のシングルトン
Dagger を使用しているときに、必要な場所にシングルトンを挿入すると、シングルトンの複数のインスタンスが得られることがわかりました。クラスと provides メソッドに@Singleton
. なぜこれが起こっているのか誰にも考えられますか?
編集:
それが役立つ場合は、Dagger の GitHub ( https://github.com/square/dagger/tree/master/examples/android-activity-graphs )のサンプル アプリケーションと同じ構造に従ってアプリを作成しました。基本アクティビティでシングルトンを取得しようとしており@Provides
、カスタムApplication
クラスで使用して提供されるいくつかのサード パーティ クラスを取得しようとしています。元のオブジェクト グラフに各アクティビティでモジュールを追加しているためですか?
(PS : 私は一般的に Dagger と DI に慣れていないので、学習できるように説明を提供していただければ幸いです。ありがとうございます。)
android - ダガーと入れ子になった注射
私はDaggerを使用して Android アプリケーションに依存関係を注入していますが、クリーンな方法で解決する方法が完全にはわからない問題に遭遇しました。
私が達成しようとしているのは、ヘルパーをインスタンス化してアクティビティ内に注入し、これらのヘルパーにも注入されたメンバーを含めることです。
機能するもの
私のヘルパーが注入されているアクティビティ:
オブジェクト グラフを作成するアプリケーション:
インジェクションは、SampleHelper クラスを直接インスタンス化すると完全に機能し、次に、インジェクトされたアプリケーション コンテキストを受け取ります。
次のモジュールを使用します。
うまくいかないこと
ただし、ヘルパー インターフェイスをその実装から分離すると、次のようになります。
そして、これを短剣モジュールに追加します:
予想どおり、SampleHelperImpl にコンテキストが挿入されません。さて、これは、インジェクションによって開始されたコンストラクター呼び出しではなく、直接コンストラクター呼び出しによって SampleHelperImpl がインスタンス化されたためだと思います。 MyModule#provideApplicationContext() が呼び出されることさえないためです。おそらく、以前の DI の経験には Spring のみが含まれていたためです)。
「クリーンダガー」の方法で、注入されたヘルパー実装にコンテキストを注入する方法についてのアイデアはありますか?
どうもありがとう!
android - アクティビティ グラフと見つからない依存関係
私は短剣を使い始めています。かなり気に入っていますが、今はいくつかの困難に直面しています。私のシナリオは次のとおりです。アクティビティとその依存関係があります。依存関係がアクティビティに注入され、そのアクティビティへの参照が必要になります。ちょうどこのような:
アクティビティのグラフについては、github の短剣の例に従っています。そのため、プロジェクトで同様の構造を作成しました。まず、継承元のBaseActivity
クラス:MainActivity
そしてモジュール:
さて、問題: No injectable members on com.example.proto.BaseActivity. Do you want to add an injectable constructor? required by public com.example.proto.ScbeHelper(com.example.proto.BaseActivity)
つまり、プロバイダー メソッドは何らかの理由でActivityModule.provideActivity()
のインスタンスを実際には提供しませんがBaseActivity
、私の理解では正しく設定されています。私のセットアップでエラーが表示される人はいますか? 私は短剣の論理に何か欠けていますか?
前もって感謝します!
android - Dagger でのテスト中にプロバイダー インジェクションを Mockito モックに置き換える
Android サービス ( ) に加えている一連の変更をテストしようとしていますandroid.app.Service
- 私は Dagger と Robolectric を使用しており、テスト範囲を縮小するために、サービス内のフィールド注入クラスをいくつかのモックに置き換える必要があります.. .それを(わずかに)より「ユニット」のようにします。
というわけでショートバージョン…
私はProviders.of
(そこにGuice構文...)を挿入しますandroid.app.Service
。単体テスト中にそれらを MockProviders に置き換えるにはどうすればよいですか?
ロングバージョンは…
関連するサービス コードは次のようになります。
したがって、通常の操作では、startService(intent)
呼び出しによってサービスが依存関係を挿入できるようになり、問題onCreate
はありません。
私のテストでは、注入されたProvider
sget()
呼び出しを Mockito モックに置き換えたいと考えています。私はDagger テストの例に従うことを試み、次のようなテスト モジュールを作成しました。
実際の Service コードが Provider を呼び出すと、 Mockitoget()
モックが返されることを期待しています (これらは、テスト モジュール @Provides のモックです)。
これは起こっていません。私がここに向かっているアプローチの何が問題なのですか?
java - Dagger グラフで管理対象オブジェクトをライフサイクルするにはどうすればよいですか
Dagger でのライフサイクル管理のサポートは見当たりません。DI のみで、@PostConstruct または @PreDestroy には何もありません。
Dagger に Spring と同じ方法でオブジェクトをグラフで開始/停止してもらいたいです。これどうやってするの?
dagger - デフォルト コンストラクターのダガー
私は自分のプロジェクトでダガーを立ち上げようとしています。
ただし、コンパイル中にクラスの 1 つで次の例外が発生します。
エラー: Foo に注入可能なメンバーがありません。注入可能なコンストラクターを追加しますか?
ただし、クラスには依存関係がないため、デフォルトの引数なしコンストラクターを使用します。
以下のような注入可能な引数なしのコンストラクターを本当に追加する必要がありますか?
dependency-injection - ダガー再帰注射
私は短剣を試していますが、現在のユースケースは以下のコードで表されています。私はダガーがオブジェクトを再帰的に注入すると思ったが、それは起こらないようだ.
で null になっていますtop.inner
。
これがダガーの望ましい動作であるかどうかはわかりませんが、そうである場合は、すべてのオブジェクトへの注入に頼らずにこれを行う方法を提案できます。
編集ユースケースを少し変更しました。ちょっと細かいことは忘れました(.
ありがとう
java - Dagger と CDI の間で共通の JSR 330 コードを共有することは可能ですか?
私は、ソーシャル ネットワーク データの消費を支援するフレームワークであるAgoravaのテクニカル リーダーです。
現在、Agorava は Java EE スタックでの使用を容易にするために CDI 上に構築されていますが、Android で動作するより軽量なソリューションを実現するために、Dagger を使用した実装を提供したいと考えています。
私の質問は、CDI と Dagger の実装の間で、共通の JSR 330 準拠のコードを共有できますか? つまり、Dagger を使用して、JSR 330 アノテーションを付けた jar にコードをコンパイルし、ソース コードを拡張したり、Dagger 固有の Jar でこのコードを使用したりすることは可能@Provides
です@Modules
か?
答えが「いいえ」の場合、一般的な JSR 330 jar を Dagger コンパイラでコンパイルし、それを CDI 実装で使用することに問題はありますか? より正確には@Inject
、修飾子やその他の JSR 330 仕様は実行時に引き続き利用可能であり、これらのアノテーション コードを持つクラスは Dagger コンパイラによって変更されないままになりますか? 最後に、Dagger で生成されたコード (クラス名、注釈) に、CDI がそれを検出して無視できるようにする一種のトラッカーがありますか?