問題タブ [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.

0 投票する
1 に答える
18263 参照

android - Dagger2 - 注入されたオブジェクトの代わりに null

簡単にするために、Apache バリデーターから EmailValidator をアクティビティーに挿入するとします。

私は MainModule クラスを持っています:

および MainComponent インターフェイス:

アクティビティでバリデーターを使用しようとすると、nullpointer 例外が発生します。

明らかに私は何かが欠けています。私は短剣が私のためにコンポーネントの実装を作成することを知っています. 使うべきですか?どのように?

onCreate メソッドで次のことを行うと:

その後、すべて正常に動作します。

しかし、代わりに @Inject アノテーションをどこでも (おそらくフィールドではなくセッター/コンストラクターで) 使用できるようにしたいと考えています。

私は何が欠けていますか?

私はdagger1で似たようなことをしましたが、うまくいきました。もちろん、私ObjecGraph.inject(this)は活動を呼びかける必要がありました。dagger2に相当するものは何ですか?

編集:

わかりましたので、解決策を見つけました。誰かがそのような問題を抱えている場合は、いくつかのスニペットがあります:

1) アプリケーション クラスを作成しました。

2) AndroidManifest.xml 内:

3) そして最後に、いくつかのコンポーネントを注入したいアクティビティ クラスで、これらの 2 つの醜い行は次のようになります。

0 投票する
0 に答える
57 参照

java - 依存関係をオブジェクトに注入するには、最初にそれを適切なコンポーネントに注入する必要がありますか?

それで、いくつかのオブジェクトを注入したいクラスがある場合、最初に何らかの方法でアプリケーションコンテキストを取得し、このオブジェクトをメインアプリケーションクラスによって保存されたコンポーネントに注入する必要がありますか?

0 投票する
1 に答える
698 参照

eclipse - クラスを生成しないEclipseのDagger2

Mortar で新しいアプリをセットアップしようとしています。このために、モルタル HelloWorld プロジェクトを構築しようとしています。Android Studio はネイティブ デバッグをサポートしていないため、Eclipse を使用する必要があります (私は Android Studio と Gradle の方がはるかに好きです)。

  • ここでmortar-helloworld説明されているように Dagger1 をセットアップすると、Dagger1 の例は Eclipse (Ant) で動作します
  • このmortar-hellodagger2例は、Maven でビルドすると機能します
  • mortar-hellodagger2ただし、 Eclipse (Ant) でサンプルをビルドしようとすると、 ClassNotFoundException: com.example.mortar.Dagger_Main_Component.

Dagger1 のように Dagger2 をセットアップし、次のようにライブラリをフォルダーに配置しました。

Dagger2 で Eclipse を正常にセットアップした人はいますか?

0 投票する
1 に答える
592 参照

android - Android、Dagger、ミドルウェア ネットワーク クラスの依存性注入設計パターン

これを特定の質問に入れる方法がよくわかりませんが、試してみましょう。間違った説明や言葉遣いを前もってお詫びします。

特に Dagger 2 で依存性注入パターンの学習を開始し、いくつかの例を閲覧しました。私の目標は、主にテスト用にネットワーキング (ミドルウェア) クラスを注入することです。これまでに見た例では、すべてのネットワークをサブクラスとして持つ 1 つのインターフェースと、インターフェースをバインドするための 1 つのモジュール クラスを作成し、アプリケーション クラスはオブジェクト グラフを作成しています。これはよくあるパターンですか?

私が想像しているのは、10 個のネットワーキング クラスがあるとします。ほとんどの場合、1 つの画面には 1 つまたはいくつかのミドルウェア クラスしか必要ありません。しかし、私が見たのは、アプリケーションにミドルウェア全体を注入していたことです。数行で本番とテストのクラスを切り替えるのは簡単に思えますが、アプリケーションの起動時にネットワーク クラス全体でグラフを作成するのは良い考えですか?

0 投票する
2 に答える
13832 参照

android - Dagger v2: 2 つの異なるスコープを 1 つのオブジェクトに注入する

アプリケーション全体のシングルトン プロバイダーとして moduleA をセットアップし、ユーザー関連オブジェクト プロバイダーとして ModuleB をセットアップしました。

私のユーザー表示フラグメントは、システム全体のバスを使用してメッセージを他のユーザーに送信し、ユーザー関連オブジェクトを使用して表示します。

問題は、異なるスコープ クラスを 1 つのオブジェクトに挿入できません。component.getX メソッドの使用は正常に機能しますが、注入が推奨される方法です。エラー メッセージ: @UserScope は、スコープが異なるバインディングを参照できない場合があります: @Provides @Singleton Bus ModuleA.provideBus()

ユーザー関連情報プロバイダーとしてのモジュール B

次のようにコンポーネントをセットアップします。

0 投票する
3 に答える
5419 参照

java - @Inject フィールドの null オブジェクト

私は Android アプリケーションの MVC パターンに従っていますが、この問題に数回遭遇し、回避する必要がありました。 私のアプリケーションがフィールドで @Inject アノテーションを使用して注入されたオブジェクトを作成できる場合、そのオブジェクトの @Inject フィールドは null であり、通常はクラッシュを引き起こします。 たとえば、ロジックとフローを処理するコントローラー クラスがあります。フラグメント/アクティビティはコントローラーにコールバックして、ユーザーの操作/状態の変化を通知します。ただし、挿入された Controller のインスタンスは通常 null です。

簡単な例を挙げて説明します。以下では、コントローラーに挿入されたアクティビティが作成され、それを使用してフラグメントを追加してフローを開始しています。その依存関係は処理されますが、コントローラーのアクティビティの依存関係は処理されません (つまり、null)。

ビジネス ロジックとフローを処理する単純なコントローラー クラス:

ユーザーの操作を処理し、コントローラーにコールバックしてビジネス ロジックを実行する単純なアクティビティ:

オブジェクトをグラフに挿入するための単純なモジュール クラス:

オブジェクトを消費するメソッドを提供する単純な Component クラス:

0 投票する
2 に答える
409 参照

android - Dagger 用の RoboGuice のような Android ライブラリはありますか?

アプリを RoboGuice から Dagger に切り替えているところです。RoboGuice には、ネイティブ コンポーネントを注入できるこの優れた機能があります (@Inject Context mContext は Context オブジェクトを提供します)。これを行うことができる Dagger または別の DI ライブラリの拡張機能を誰かが知っているかどうか疑問に思っていました。ありがとう!

0 投票する
1 に答える
2828 参照

java - ダガーがレイジーを初期化しない怠惰な変数?

Java とDagger依存性注入フレームワークを使用しています。多くの場合、クラスを初期化する必要がありますが、後で使用する状況があります。

メッセージが最初に要求されたときに初期化され、その瞬間から常にこのクラスで同じメッセージインスタンスを使用する必要があります。どうやってやるの?

編集:

次のようにLazyを使用しようとしましたが、lazyMessageは次のとおりですundefined

これが私のdagger2構成です:

lazyMessage を短剣でインスタンス化するにはどうすればよいですか?