問題タブ [assisted-inject]
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 - guice で FactoryModuleBuilder で Assisted Inject を使用する - ファクトリ インジェクションが行われていない
私は、FactoryModuleBuilder を使用して Guice で支援された注入を実装する方法を理解しようとしている Guice 初心者です。FactoryModuleBuilderの実装については、Guice Java ドキュメントを参照しました。
ドキュメントに記載されているとおりにすべてを行いました。工場に注入していません。このスタック オーバーフローの質問を参照しました。Guice AssistedInject は、同じ問題が発生したファクトリを注入しません。コンストラクター注入問題の前のフィールド注入について話します。私はそれに従い、呼び出し元クラスを使用して親クラスを呼び出そうとしていますが、まだヌルポインター例外が発生しています。ここで何がうまくいかないのですか?
呼び出し元クラス
私はまだ例外を取得しています:
親クラス
モジュールの実装: ParentModule
工場インターフェース: MyFactory
クラス インターフェイス : Foo
クラス:FooImpl
scala - スカラギスとアシストインジェクション
私はかなり長い間、補助注入メカニズムで google-guice を使用してきました。私はscalaにいて、scala-guiceを発見したばかりなので、それを使用することに興味があります。しかし、アシストインジェクションを使用する方法については混乱しています。アシスト注入を使用した例はありません。
したがって、ここでの私の質問は次のとおりです。scala-guice でアシスト インジェクションを使用することは可能ですか? はいの場合、誰か簡単な例を教えてください。
さらに、google-guice の場合、次のライブラリを使用します: javax.inject.jar、guice-3.0.jar、guice-assistedInject.jar。この場合、 guice-3.0.jar を削除するだけですか?
java - Guice Assisted Inject Factory を使用して AsyncTask にコンテキストを注入する際のエラー
Guice Extension - Assisted Inject の助けを借りて、RoboGuice 2.0 を使用して Android プロジェクトを作成しています。現在、非 UI スレッドでファクトリを介してコンテキストを注入する際に問題に直面しています。
私の問題を示すサンプルプロジェクト:
個人インターフェース:
人の実装:
パーフォン工場:
モジュール:
主な活動:
AsyncTask が実行されるとインジェクターが Person オブジェクトを作成します。この操作は正常に機能し、期待どおりに PersonImpl オブジェクトが返されます。ただし、ファクトリが新しい Person オブジェクトを作成しようとすると、次の例外が発生します。
これらの作成操作が UI スレッドで実行される場合、両方の PlayerImpl オブジェクトが適切に作成されます。Google Guice を使い始めたばかりで、インジェクターを使用してオブジェクトを作成するとすべて問題なく、factory を使用しない理由がわかりません。スレッドでファクトリを使用する方法はありますか?
eclipse-plugin - Eclipse ターゲット プラットフォームの guice-assistedinject.jar ですが、プラグインの依存関係には追加できません
Eclipse 4.4 Luna M5でEclipse RCPアプリケーションを開発しており、Guice 3.0を使用しています。 そこで、ターゲット プラットフォームに guice.jar を追加し、開発中のすべてのプラグインに対して、Eclipse のプラグイン マニフェスト エディターを使用してバンドル com.google.inject をプラグインの依存関係に追加できます。これまでのところ、すべて正常に動作しています。
今問題: Guice 支援注入 ( ) を使用したいです@Assisted
。
そこで、guice-assistedinject.jar をターゲット プラットフォームに追加しました。(私は .target ファイル = Eclipse ターゲット定義ファイルを使用しています)。
.target ファイル エディターの [コンテンツ] タブで、Eclipse はcom.google.inject.assistinject
guice-assistedinject.jar のフラグメント バンドル 3.0 を正しく表示しますが、このバンドルまたはこのバンドルのエクスポートされたパッケージをプラグイン プロジェクトの依存関係に追加することはできません。発展しています。
プラグイン マニフェスト エディターで [追加] を押すとcom.google.inject.assistedinject
、追加可能な依存関係のリストにありませんか? どうしたの?
java - ダガーアシスト注射の例を探しています
オブジェクトグラフからいくつかの依存関係を取得し、実行時に呼び出し元から他の依存関係を取得するクラスがあります。
Factory を定義する解決策を思いつきました。
ImageDownloader
ここで、クライアントのコンストラクターに注入する代わりに、単純にそのメソッドを注入ImageDownloader.Factory
して呼び出します。create()
ご覧のとおり、これは非常に冗長で長いものです。また、複製とボイラープレートがたくさんあります。フィールド自体に で注釈を付けるにはいくつかの障害がある@Inject
ため、現時点ではこの可能性を無視しましょう。
Square の人々は、プロバイダーを使用して興味深い解決策を思いつきました。Factory
インターフェイスを定義し、
モジュールで提供し、
(再び、dagger-discuss@ から)。
MyImageDownloader
は、別のクラスによって注入されるクラスによって注入されるクラスであり、さらに別のクラスによって注入されるクラスであり、 ... で参照されます@Module
。これは何とか*機能し、すべてのクラスはビルド時に見つかります。さて、モジュールを追加するには、オブジェクト グラフにそれを明示的に知らせる必要があります。
新しいクラスを注入するのは非常に簡単ですが、新しいモジュールを追加するのは非常に面倒です。
私の質問は次のとおりです。補助注射は実際にどのように行われますか? 誰にも例がありますか?使用する場合、どのように使用ImageModule
すればよいですか?
* - 「どういうわけか」というのは、それが私にとって部分的に魔法であることを意味します。
java - 同じタイプの複数のパラメーター (@Named パラメーター) で @Assisted inject を使用する
私の問題は、ファクトリへの 2 つの文字列引数で @Assisted を使用することに要約されます。問題は、Guice が型をパラメーターの識別メカニズムとして扱うため、両方のパラメーターが同じであり、構成エラーが発生することです。
いくつかのコード:
問題は、二重文字列パラメーターにあります。
各文字列に個別の @Named("as appropriate") 注釈を付けようとしましたが、構成エラーが増えるだけです。これらのエラーの音から、彼らはファクトリ クラスにバインディング アノテーションを望んでいないので、カスタム バインディング アノテーションは試していません。
シンプルでノイズの多い解決策は、これら 3 つの補助値を含む単純な引数クラスを作成し、単純にそれを注入することです。
これは機能し、かなりバグがない可能性がありますが、うるさいです。そのネストされた静的クラスを取り除く何らかの方法があればいいでしょう。
助けてくれてありがとう!
guice - Guiceの補助注射
補助注射の使用についてアドバイスをお願いします。
アシスト注射について私が見た例のほとんどは、次の特徴を持っています。
コンストラクターであるクラスには、実行時にのみ発生する 1 つまたは複数のパラメーター、つまり、構築時に決定できないパラメーターと、構築時に既知の 1 つまたは複数のパラメーターがあります。したがって、ファクトリの create メソッドは、実行時に提供されるパラメータのみを取ります。
私の場合、90% の確率で、実行時パラメーターしかありません。つまり、クラス B を必要とするクラス A がありますが、B は A だけが提供できるパラメーターを取ります。したがって、B のコンストラクターには @assister パラメーターしかありません。
それがアシストインジェクションの正しい使い方なのかなと思っています。
私の最後の例の1つは次のとおりです。A は dataStructure (DTO または値オブジェクトと呼ばれることもあります) であるクラス B を返す必要があるため、必要なファクトリを A に渡し、計算後に B を返すことができるようにします。ここで、B はコンテナー クラスのようなものです。そういうケースはほとんどない
..
もう 1 つの状況は、サービス A が B サービスを必要とするが、B サービスが作成時に A からのパラメーターに依存する場合です。ただし、A からのパラメーターが彼自身が A に注入した場合、A はそれを使用して B を作成する前に、そのパラメーターに対して何らかの初期化を行います。
.
特に最後のケースでは、 A の外部で「 A の内部初期化」を行うことを目指します。
そのパッケージの「サービスの内部作成」を外部化する、各パッケージに特定の作成モジュールを含めるという考えですか?
これを言っているのは、それを使用するクラス/サービスとは関係のないものをどこかに作成するのは奇妙に聞こえるといつも思っていたからです。使用法を構造から分離することに固執しないという意味ではありませんが、そのようなクラスを囲むクラスでそれを行いたいと思います。まったく関係のない遠く離れた場所ではありません。
私の現在の理解では、各パッケージは、特にプライベートコンストラクターを使用する場合に、含まれるオブジェクトの作成を一元化する作成モジュールを提供する必要があります。
私はこれまでしばらく Guice を使用してきましたが、モジュールを分離し、モジュールをパッケージと一緒に保持することについて何かを考え始めたのはつい最近のことです。私はモジュール間の継承を行ってオブジェクトの作成を連鎖させていましたが、最初からすべてを作成する1つのモジュールになりました。それは間違っていますよね?
それだけです。Guice を使用する際の正しいアプローチに関する一般的なアドバイスをいただければ幸いです。補助注射を正しい方法で使用しているかどうかはわかりません。