問題タブ [dependency-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.
dependency-injection - 多くの依存関係を持つクラスに依存性注入フレームワークを使用する
私が取り組んでいるプロジェクトがそれから大きな恩恵を受けると感じているので、私は .NET のさまざまな依存性注入フレームワークを見てきました。私はこれらのフレームワークの機能をよく理解していると思いますが、それらを大規模なシステムに導入する最善の方法についてはまだ少し不明確です. ほとんどのデモは (当然のことながら) 1 つまたは 2 つの依存関係を持つ非常に単純なクラスになる傾向があります。
3つ質問があります...
まず、ILog、IApplicationSettings、IPermissions、IAudit など、一般的だが興味のない依存関係をどのように処理しますか。すべてのクラスがこれらをコンストラクターのパラメーターとして持つのはやり過ぎのようです。DI コンテナーの静的インスタンスを使用して、必要なときにこれらを取得する方がよいでしょうか?
第二に、使用される可能性はあるが作成に費用がかかる可能性がある依存関係にどのようにアプローチしますか。例 - クラスが ICDBurner インターフェイスに依存しているが、CD 書き込み機能が実際に使用されていない限り、具体的な実装を作成したくない場合があります。コンストラクターでファクトリ (ICDBurnerFactory など) にインターフェイスを渡しますか? それとも、DI コンテナーに直接アクセスする静的な方法を使用し、必要な時点でそれを要求しますか?
第 3に、最上位の GUI コンポーネント (MainForm など) が潜在的に数百のサブパネルまたはモーダル フォームの親であり、それぞれにいくつかの依存関係がある大規模な Windows フォーム アプリケーションがあるとします。これは、 MainForm がその子のすべての依存関係のスーパーセットを依存関係として持つように設定する必要があることを意味しますか? そして、そうすると、MainForm を作成する瞬間に必要となる可能性のあるすべてのクラスを構築する巨大な自己膨張モンスターが作成され、その過程で時間とメモリが無駄になるのではないでしょうか?
prototype - 通常、DAO が持つべきスコープ
dao が状態を保持しないことは論外です。
しかし、クラスに最も簡単にアクセスするには、prototype(=new every time) と singleton のどちらを使用する方がよいでしょうか?
単純なオブジェクトの作成はdaoにとって安価です..通常、sessionfactoryのみを保持し、シングルトンのリストからオブジェクトにアクセスすると、同様に高価になる場合があります.
明確化: この質問の焦点は、daos の範囲設定に共通の規則があるかどうかです。
.net - Castle Windsor config からプロパティを読み取る/解決する方法
私は、接続文字列のようなプロパティも.Net構成セクションの下に保持されている城のxml構成をたくさん持っています。
コンテナを使用してプロパティを読み出せるようにしたいのですが、それを行うメカニズムがわかりません。
すなわち
...
コンポーネントの依存関係があるため、明らかにプロパティがあります。コンポーネントは解決できますが、プロパティは解決できません。
確かに、注入されたプロパティ キャッスルを読み取るためだけにコンポーネントを新しく作成することも、名前と値のペアを保持するためだけに特化したコンポーネントにすべてのプロパティをラップすることもできます。しかし、単純な container.resolve("property.connectionstring") 表記があると思っていたでしょう。
*編集マークダウンはあまり得意ではありません。上記はxmlセクションであることが意図されていました。
dependency-injection - メソッドまたはコンストラクターに依存性を注入しますか?
依存性注入は良いことのようです。一般に、依存関係は、依存関係を必要とするメソッドに注入する必要がありますか、それともクラスのコンストラクターに注入する必要がありますか?
同じ依存関係を注入する2つの方法を示すには、以下のサンプルを参照してください。
.net - MEF が DI/IoC コンテナーではないのはなぜですか?
MEF は別の IoC コンテナーではないとブロゴスフィアや Microsoft 自身によって言われています。
いいけどなんで?私には同じように思えます。Unity やCastle Windsorほど良くはないかもしれませんが、それでも定義には合っていますね。
MEF が Unity や Castle Windsor のような IoC コンテナーではないのはなぜですか?
.net - Linq への依存関係を Sql に注入する
Linq to Sql またはエンティティ フレームワーク エンティティに依存関係を挿入するメカニズムはありますか? もしそうなら、それは賢明なアプローチでしょうか?
.net - DI- Type 型の動的パラメーター。ここで、type は親オブジェクトの型です。
クラスの 1 つに注入する必要がある依存関係があります。この依存関係は のライフスタイルになりTransient
ます。次に、 type の依存関係がありType
ます。この型は、元のクラスの型である必要があります。どうすればこの登録を行うことができるか、誰かが知っているかどうか疑問に思っていました.
例を参照してください:
Container.Resolve
これで、必要なときにいつでも電話して、手動でCustomer
注入できることがわかりました。Register
しかしRegister
、ほとんどのクラスに注入する必要があるため、これは実際には実現可能ではありません。したがって、configまたはを介してそれを行う方法が必要container.Register
です。
c# - WebRequest/Response 依存関係を挿入するにはどうすればよいですか?
次のコードで依存関係を分離するのに苦労しています:
本来は外部サイトへのリクエストに頼らず単体テストを行いたい。
これについて最善の方法は何ですか?
dependency-injection - 実用的なシングルトンと依存性注入の質問
システムに一度だけ存在し、基本的にアプリケーションのさまざまなアクションのさまざまな権限を管理する機能を果たす PermissionManager というクラスがあるとします。現在、アプリケーションにクラスがあり、そのメソッドの 1 つで特定の権限をチェックできるようにする必要があります。このクラスのコンストラクターは現在パブリックです。つまり、API ユーザーによって使用されます。
数週間前までは、クラスに次の疑似コードをどこかで呼び出させるだけでした。
しかし、ここにいる全員がシングルトンとこの種の結合を嫌っていることに気付いたので、私が読んだシングルトンに対する議論は理にかなっているように見えるので(テストできない、結合が高いなど)、より良い解決策は何かと思っていました。
では、API ユーザーがクラスのコンストラクターで PermissionManager インスタンスを渡すことを実際に要求する必要があるのでしょうか? アプリケーションに PermissionManager インスタンスを 1 つだけ存在させたいのですが?
それとも、私はこれについてすべて間違っていて、非公開のコンストラクターと、PermissionManager のインスタンスを渡すファクトリーをどこかに持つ必要がありますか?
追加情報「依存性注入」と言うとき、DIパターンについて話していることに注意してください... Guice や Spring などの DI フレームワークは使用していません。(...まだ)
c# - .net による制御の反転
.Netで Inversion of Control (Ioc) の原則を使用している人を耳にすることはめったにありません。Spring と PicoContainer でより多くの Ioc を使用する Java で作業する友人が何人かいます。
コードから依存関係を削除するという原則は理解していますが、それがはるかに優れているとは思えません。
.Net プログラマーがこれらのタイプのフレームワークを使用しない (または使用しない) のはなぜですか? もしそうなら、本当に長期的にプラスの効果を見つけますか?