問題タブ [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 - @Assisted \ @Provider の使用による階層設計でのオブジェクト作成
この質問は、Guice @Assisted と @Provides の正しい使い方と、その方法についてです。
私が参照している現在の設計は次のようなものです。階層の最上位にあるクラスは、クライアント (基本的にはパブリック API) に公開される唯一のクラスでもあり、次のようになります。
おそらくご存じのとおり、id は作成時にユーザーによって提供されます (@Assisted?) が、他のものはそうではなく、単なる工場です。
クラスManagerは、クラスShiftのインスタンスを作成します。クラスShiftは、クラスWorkerのインスタンスを作成します。
次に、クラスShiftを作成するために、そのコンストラクターを使用します。
Managerによって提供されるshiftIdと残りはManagerのコンストラクターからの同じオブジェクトです。
Workerを作成するために、2 つの静的ファクトリ メソッドを使用します (ただし、変更することができます..):
Shiftクラスによって提供されるworkerId 。残りはShiftコンストラクターから委任されます。
それを行うための正しいGuice-yの方法は何ですか? @Assisted はどこに配置すればよいですか? @提供しますか?
これまでに見たコード例はまだ理解できないので、抽象モジュールを含むそのコード例が本当に欲しいです。
ありがとう
java - Guice - アシスト付きインジェクション ファクトリによって作成されたインスタンスのバインド
コンストラクターが次のようなクラス A があるとします。
AFactory があります。
したがって、AI のインスタンスを作成するには、明らかに次のようなことを行う必要があります。
しかし、たとえば、タイプAのメンバーを持つクラスB、クラスC、クラスDなど、他のクラスがあるとしましょう(フィールドインジェクションを使用しますが、ctorにすることもできます):
そして、A の同じインスタンスがそれらのクラスに注入されることを望みます。ただし、A の別のインスタンスを他のクラス (クラス E と F としましょう) に挿入するオプションがまだあります。
それを行う正しい方法は何ですか?私はそれを行うためのきれいな方法を考えることはできません。
java - 複数のコンストラクターを使用した Guice 支援注入は、常にデフォルトのコンストラクターを呼び出します。
2 つのコンストラクターを持つクラスがあります。Guice ファクトリを使用して、このクラスのインスタンスを作成しようとしています。パラメーターが渡されない場合は、既定のコンストラクターを呼び出す必要があります。パラメーターが渡された場合は、パラメーターを持つコンストラクターを呼び出す必要があります。しかし、現在、ファクトリ メソッドにパラメーターを渡しても、既定のコンストラクターが呼び出されます。パラメータを持つコンストラクタはまったく呼び出されていません。以下は私のファクトリークラスです。
以下は、私が注入しようとしているコンストラクターです。
以下は、抽象モジュール実装クラスでの私のモジュールバインディングです。
以下は、コンストラクターの呼び出し方法です。
ここで何が間違っていますか?どんな助けでも大歓迎です。
編集:
JsonMapperImpl クラスにはコンストラクターがないことに注意してください。public メソッドがあるだけで、それだけです。
java - guice アシスト注入 + マルチバインディング + ジェネリック
私は Guice の 3 つの機能 (注入、マルチバインディング、ジェネリック) を組み合わせようとしています。私は生産プロジェクトのプロトタイプを作成するので、ここにあります:
まず、これはジェネリックの小さな階層です (実稼働環境では、N 個のエンティティの階層があります)。
次に、Factoryで作成したいクラスToCreate1とToCreate2。
基本クラス:
それは継承者です:
次に、Factory自体:
そこで、 Factory<Type1>とFactory<Type2>を含むマップを注入して、ToInject1とToInject2をそれぞれ作成します。
そこで、 configure メソッドを使用して Guice のAbstractModuleを作成します。
だから、私はそれを注入し@Inject public Map<String, Factory> map;
、すべてがOKです:
前に述べたように、本番システムにはもっと多くのタイプがあるため、AbstractModuleは扱いにくくなります。コードの重複を避け、configureメソッドを修正しました。
そして、それはうまくいきません!ギース 言います:
どうしたの?