問題タブ [inversion-of-control]
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.
c# - キャッスルウィンザーとは何ですか、なぜ気にする必要がありますか?
私は長年のWindows開発者であり、win32と初期のCOMに歯を食いしばっています。私は2001年から.NETを使用しているので、C#とCLRにかなり精通しています。Stack Overflowに参加し始めるまで、CastleWindsorのことは聞いたことがありませんでした。Castle Windsorの「GettingStarted」ガイドを読みましたが、クリックされません。
この老犬に新しいトリックを教えて、CastleWindsorをエンタープライズアプリに統合する必要がある理由を教えてください。
inversion-of-control - 依存性注入のクラスを設計するためのガイドライン
単体テストのベスト プラクティスに関するこの質問では、依存性注入のためのクラスの設計について言及しています。これは一体何を意味するのだろうと考えさせられました。
コントロール コンテナーの反転の作業を開始したばかりで、この問題についていくつかのアイデアがあるので、それらを壁にぶつけて何がくっつくか見てみましょう。
私の見方では、オブジェクトが持つことができる依存関係には 3 つの基本的なタイプがあります。
- オブジェクトの依存関係- 問題のクラスによって使用される実際のオブジェクト。たとえば、LogInFormController の LogInVerifier です。これらは、コンストラクターを介して注入する必要があります。クラスが十分に高レベルで、コンストラクターでこれらのオブジェクトを 4 つ以上必要とする場合は、クラスを分割するか、少なくともファクトリ パターンを使用することを検討してください。また、インターフェイスを使用して依存関係を提供し、インターフェイスに対してコーディングすることも検討する必要があります。
- シンプルな設定- たとえば、しきい値やタイムアウト期間など。これらには通常、デフォルト値があり、ファクトリ パターンのビルダーを介して設定する必要があります。それらを設定するコンストラクターのオーバーロードを提供することもできます。ただし、ほとんどの場合、クライアントに明示的に設定するよう強制するべきではありません。
- メッセージ オブジェクト- あるクラスから別のクラスに渡されるオブジェクトで、受信クラスがビジネス ロジックに使用すると思われます。例として、LogInCompleRouter クラスの User オブジェクトがあります。ここでは、多くの場合、コンストラクターでメッセージを指定しない方が良いことがわかります。これは、User インスタンスを IoC コンテナーに登録する (グローバルにする) か、User のインスタンスが作成されるまで LogInCompleteRouter をインスタンス化しない必要があるためです。 (DIを使用できなかったか、少なくともコンテナへの明示的な依存関係が必要になる場合)。この場合、メソッド呼び出しに必要な場合にのみメッセージ オブジェクトを渡す方がよいでしょう (つまり、 LoginInCompleteRouter.Route(User u); )。
また、すべてを DI する必要はないことにも言及しておく必要があります。使い捨てクラスに分解するのに便利な単純な機能がある場合は、その場でインスタンス化しても問題ないでしょう。明らかに、これは判断の呼びかけです。次のようなクラスを書くのが適切だとわかった場合
私はおそらく依存関係を注入することを気にせず、オブジェクトをusingブロック内で直接インスタンス化するだけです。当然のことながら、単体テストを作成する価値がある場合は、おそらく注入する価値があります。
それで、あなたたちはどう思いますか?追加のガイドラインや対照的な意見は大歓迎です。
language-agnostic - IOC フレームワークでコンストラクターに引数を渡す方法
IOC フレームワークのコンストラクターに引数を渡すにはどうすればよいですか? 私は次のようなことをしたいです:(IOCフレームワークにとらわれないようにしています;))
これは StructureMap では不可能のようです。しかし、誰かが私が間違っていることを証明するのを見たい.
他のフレームワークはより機能が豊富ですか? それとも IOC フレームワークを間違った方法で使用していますか?
inversion-of-control - 遅延読み込みのデータ アクセス依存関係を挿入する適切な方法は何ですか?
遅延読み込みを行うときにデータ アクセスの依存関係を挿入する適切な方法は何ですか?
たとえば、次のクラス構造があります
_customer_dao への参照をトランザクション オブジェクトに取得するにはどうすればよいですか? コンストラクターにそれを要求することは、トランザクションを少なくとも POCO のように見せたい場合、あまり意味がないように思えます。Inversion of Control Container を直接 Transaction オブジェクトに参照させてもよろしいですか? それもまたむずかしそうです。
NHibernate のようなフレームワークはこれをどのように処理しますか?
.net - IoC コンテナー - 最適なコンテナーはどれですか? (。ネット)
人々が IoC コンテナに何を使用しているかを知りたいです。Castle Windsor についていくつか良いことを読んだことがありますが、多くの人が StructureMap、Unity、Ninject などを使用していることを知っています。
言及されたもの(および私が無視したもの)の違いのいくつかは何ですか。強み?弱点?より適切な適合 (StructureMap は ABC には最適ですが、XYZ にはあまり適していないなど)?
c# - タイプではなくオブジェクトをウィンザーコンテナに渡すにはどうすればよいですか?
私は次のクラスを持っています:
これはプレゼンター コードです。
新しいオブジェクトをインスタンス化する代わりに、現在のインスタンスViewPage
をTPresenter
viaに渡したいと思います。Windsor
どうすればこれを達成できますか? ありがとう。
.net - どの依存性注入ツールを使用する必要がありますか?
ユーザー インターフェイスの依存性注入ツールに Microsoft Unity を使用することを考えています。
私たちの中間層はすでにキャッスル ウィンザーを使用していますが、Microsoft を使い続ける必要があると考えています。
最高の依存性注入ツールとは何かについて考えている人はいますか?
oop - コールバックが使用されている場合、循環依存をどのように回避できますか?
プロデューサー/コンシューマーの関係を持つ 2 つのクラスを設計しているときに、循環依存関係を回避するにはどうすればよいでしょうか? ここで、ListenerImpl は自身を登録/登録解除するために Broadcaster への参照を必要とし、Broadcaster はメッセージを送信するために Listener への参照を必要とします。この例は Java ですが、どのオブジェクト指向言語にも適用できます。
dependency-injection - DI/IOC の ctor パラメーターはどのように注文すればよいですか?
私は DI の初心者なので、これが間違ったアプローチやばかげた質問である場合はご容赦ください。
注文を作成/更新するフォームがあり、表示する製品と顧客のリストを取得する必要があることがわかっているとします。編集中の Order オブジェクトを渡したいのですが、依存関係として ProductsService と CustomersService も注入したいと考えています。
そのため、IoC コンテナー (どちらを使用する場合でも) でサービスを提供する必要がありますが、編集する Order オブジェクトを提供するのは呼び出し元のコード次第です。
Order オブジェクトを最初のパラメーターとして受け取り、その後に ProductsService と CustomersService を受け取るようにコンストラクターを宣言する必要があります。
...または、依存関係が最初に来て、 Order オブジェクトが最後に来る必要があります。例:
それは問題ですか?使用する IoC コンテナーに依存しますか? それとも「より良い」方法はありますか?
spring - IOC を気にする場合、Spring MVC でモデルを変更する最善の方法
Spring MVC を使用してアプリケーションを構築しています。アプリケーション内のすべてのコントローラーのモデルに特定の変更を加えたいと考えています。特に、アプリケーションのすべてのページに存在する特定の追加データをモデルに挿入したいと考えています。
これにはいくつかの方法があります。すべてのコントローラーの最後にデータを追加する、余分なデータを追加するモデルのサブクラスを使用する、モデルをラップする ModelAndView のサブクラスを使用する、使用する前にモデルをラップする VelocityView のサブクラスを使用するそれは... 他のオプションがあると確信しています。
しかし、私には「エレガンス」の制約があります。すべてのコントローラーにコードを記述したくはありません。この動作を1か所だけで定義する必要があります。理想的には、IOC Bean 構成ファイルによって制御されます。
これをエレガントに達成する方法について誰かが推奨していますか?