問題タブ [constructor-injection]

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 投票する
3 に答える
7422 参照

dependency-injection - IEnumerable の配列を挿入するように Unity を構成する方法

IEnumerableUnityで解決したいコンストラクターパラメーターを取り、オブジェクトの配列を注入するクラスがあります。これらの単純なクラスは問題を示しています。

に 4 つを注入したいとSimpleThingCompositeThingます。次の Unity 構成でいくつかのバリエーションを試しました。

ただし、エラー メッセージThe configuration is set to inject an array, but the type IEnumerable`1 is not an array type が表示されます。 コンストラクターのパラメーターを変更するIThing[]と機能しますが、それはしたくありません。これを機能させるには、Unity 構成に何をする必要がありますか?

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

asp.net - ASP.Net MVCのデフォルトのコンストラクターパラメーター値?

私はRazor構文でMVC3を使用しており、Apressの本「ProASP.Net MVC 3Framework」(非常に優れています)の例を検討しています。その中で、作者は_Layout.cshtmlファイルにこのビットを持っています:

私の質問はCartControllerクラスと関係があります。コンストラクターでCartオブジェクトが渡されたようですが、上記の_Layout.cshtmlスニペットのコードは、が呼び出されたときに1つを渡していないようRenderAction()です。

CartControllerスニペット:

そのメソッドをデバッグすると、実際にはCartオブジェクトが渡されますが、それがどこから来ているのかわかりません。このサンプルコードは、依存性注入コンテナとしてNinjectを使用していますが、Cartクラスについて何も知っているという証拠を構成に見つけることができません。MVCに「デフォルト値」メカニズムはありますか?

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

c# - UnityFrameworkと複数のコンストラクターの注入

依存関係としてクラスがあります:

別のクラスに挿入しようとすると、次のようなエラーメッセージが表示されました。

依存関係の解決に失敗しました......InvalidOperationException-現在のタイプIMyInterfaceはインターフェースであり、構築できません。タイプマッピングがありませんか?

IMyInterfaceこのコンストラクターを他の目的のために予約しているため、具体的な型に登録したことはありません。

私の理解では、Unityは、どちらを解決するかを明確に指示していない場合でも、最初に最小のパラメーターでコンストラクターを解決しようとします。したがって、デフォルトのコンストラクターを初期化しようとします。

私が使用する以外にInjectionConstructorAttribute、Unityに2番目のコンストラクターを無視するように指示できる賢い方法はありますか?

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

asp.net-mvc-3 - アクション メソッドのパラメーターとして使用されるビュー モデル インスタンスのコンストラクター インジェクション

ビュー モデルが作成されると、オプション (ドロップダウン リストで使用されるものなど) をビュー モデルのセッター プロパティに設定できます。問題は、そのビュー モデルが後でパラメーターとして (フレームワークによって!) アクション メソッドに渡されるときに、それらのプロパティ値が自動的に再入力されないことです。そのため、検証エラーのためにフォームを再表示する必要がある場合は、これらのオプションを再度入力します。

この質問で私が具体的に求めている1つの潜在的な解決策は、MVCフレームワークがコンストラクター注入を使用してビューモデルをインスタンス化する方法です。これにより、ビューモデルコンストラクターにある種のデータアクセスオブジェクト(リポジトリなど)の実装が提供されます) ビューによって要求されたときにオプションを取得するために使用できる (たとえば、ヘルパー メソッド "DropDownListFor" で)。

解決策は IModelBinderProvider または IModelBinder の実装と関係があるかもしれないと思いますが、ネット上のあちこちのサンプルコードスニペットからこれらのことを試した後、私はまだ完全に機能する例を探しています。すべてのものをまとめる方法の一部。

「依存性注入」の代わりに「依存性ルックアップ」など、選択リストを作成する方法についての別の議論を探している場合は、次の議論を確認することをお勧めします 。 GET/POST で ViewModel の SelectList を設定する方法

数日前、このスレッドで現在探している「依存性注入」について、次のフォローアップ質問をそのスレッドに書きました: https://stackoverflow.com/a/8674525/310457 (これは、私が解決策を探している問題)

しかし、誰かが特定性の低いタイトルの古いスレッドを見つけてくれることを期待する代わりに、私が探しているものについてより具体的な件名でこの新しい質問を作成しました. また、私が探しているこの特定のソリューションに関してフォローアップしたい人のために、そのスレッドからこの新しい質問へのリンクも提供します。

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

java - CDI コンストラクター インジェクションは、一時的なシリアル化できない依存関係では機能しません。

私は CDI のコンストラクター インジェクションがとても気に入っていますが、コンストラクター インジェクションが期待どおりに機能しないユースケースを見つけました。

私の例では、2 つのクラスがあります。クラス「BeanA」には明示的なスコープが定義されておらず、Serializable を実装していません。クラス「BeanB」には @SessionScoped のアノテーションが付けられており、Serializable を実装しています。

もちろん、BeanA のインスタンスを BeanB に注入しようとすると、BeanA はシリアル化できないため、Weld から UnserializableDependencyException が発生します。これは予期される動作です。

フィールド「beanA」を「transient」でマークすると、注入は問題なく機能します。

現在、Weld は例外をスローしません。

これは私にとってはまったく問題ありませんが、コンストラクター注入でこれを機能させたい場合、私の理解の問題が発生します。次のことを行うと、もう機能しません。

このコードでは、 UnserializableDependencyException が再び発生します。コンストラクター注入とフィールド注入は多かれ少なかれ同等だと思っていましたが、明らかにそうではありません。私の間違いは何ですか?

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

spring - Spring 3.1 で HttpServletResponse をコンストラクターで自動配線するにはどうすればよいですか?

リクエスト スコープの Bean があり、HttpServletResponse および HttpServletRequest オブジェクトにアクセスする必要があります。

コンストラクターでこれらのオブジェクトにアクセスする必要があるため、プロパティの自動配線はオプションではありません。

私は次のことをしました:

これにより、次のエラーが表示されます。

デフォルトのコンストラクターが見つかりません。ネストされた例外は java.lang.NoSuchMethodException: com.foo.bar.MyClass.() です

このエラー メッセージによると、存在しないパラメーターのない既定のコンストラクターを探しています。コンストラクターを自動配線し、特に「必須」をtrueに設定したため、インジェクターはこのコンストラクターを選択する必要があります。Bean はリクエスト スコープであるため、これは機能するはずですが、機能しません。

何か案は?

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

.net - 依存性注入-構築

私はここで正しい考えを持っているかどうかを知りたいです。私は主にインターフェースをプログラミングしているので、以下のクラスをDI経由で注入する必要があるのか​​、それとも自分でクラスをインスタンス化する必要があるのか​​を知りたいです...

注:これらのサービスは、Webアプリ(asp.net mvc)ではなくコアライブラリで保持されます

// IUserSessionは不明です。これはクライアントアプリによって異なります。これは不明なので、常に挿入する必要があります。

// IWorkflowServiceクライアントアプリにはいくつかの異なるサービス/パッケージがあるため、ビジネスルールが異なる可能性があるため、注入する必要があります

// IReadonlySessionは私のアプリでは1つしかないので、注入する必要はありませんか?他のクライアント呼び出しでは異なる可能性がありますが、可能性は低いです

// INotificationServiceは常に私が言うことであり、それは常に1つのものになるので、インターフェイスに対してプログラムする必要があり、注入する必要はありませんか?

// IReadonlySessionが挿入されます。これは、テストを実行しているかどうか、別のデータベースを使用しているか、別のクライアントアプリからコードを呼び出すかによって変わる可能性があるためです(可能性は低いですが可能です)。

質問:

オブジェクトのインスタンス化は正しいですか?私がそれを実装した方法は正しいですか?

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

architecture - シリアル化とctorインジェクションおよび不変条件の保護

ここで明らかな何かが欠けている可能性があります...

しかし、IoCとctorインジェクションの栄光を理解することを学ぶにつれて、これをオブジェクトグラフのシリアル化と調整するのに苦労しています。2つのパターンは互換性がありますか?なぜ(またはなぜそうではない)?

次のようなものがあるとします。

私は、コンストラクター注入によってクラスの不変条件を保護する鉄で覆われた安全装置が好きです。それは私のオブジェクトに彼らが常に彼らが必要とするものを持っているという確実性を与えます。不変条件の注入はリポジトリパターンと対立していますか?たぶん、ギャップを埋めるDTOレイヤーとファクトリパターンがどこかにあります...?

賢明なアドバイスを探しています...2つのパターンは互換性がありますか?なぜ(またはなぜそうではない)?

PS:IDeserializationCallbackについては知っていますが、「プライベート読み取り専用」の不変条件でどのように役立つかわかりません

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

dependency-injection - コンストラクター注入-工場にも注入しますか?

Clean Code Talksを聞いて、オブジェクトを作成するためにファクトリを使用する必要があることを理解しました。したがって、たとえば、aHouseDooraDoorがあり、aに、がある場合DoorKnob、でHouseFactorynewを作成し、DoorKnobそれをのコンストラクターにDoor渡し、次にその新しいDoorオブジェクトを。のコンストラクターに渡しますHouse

しかし、House (クラス名がであると言うABCを使用するクラスはどうですか?よろしいHouseFactoryですか?HouseFactoryでは、のコンストラクターにを渡しABCますか?そのようにコンストラクターでたくさんのファクトリーを渡す必要はありませんか?

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

c# - UNITY:コンストラクター注入でスレッドセーフな Container.Resolve() 関数を実装する方法は?

プロジェクトで Unity 2.0 を使用しており、Parallel.ForEach コード ブロック内で同時に多くのファイルを読み取っています。

Resolve(new ParameterOverride("projectFileName", currentFile) 関数は、ResolutionFailedException をスローすることがあります。

これは、同じファイルが同時にロードされた場合です。Resolve 関数は、同じパラメータを持つ 2 つの IMsBuildProjectLoader インスタンスを同時に作成しています。files.Distinct() フィルターでは解決できません。上記のコードは、私の問題を説明するためのコード例にすぎません。

問題は次のとおりです。スレッドセーフな UnityContainer.Resolve 関数を実装する方法は? Unity拡張クラスを使用してそれを行うことは可能ですか?

IMsBuildProjectLoader :

MsBuildProjectLoader :

MsBuildProjectLoader は次のように登録されます。