問題タブ [dependency-inversion]

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

c# - データクラス(特定の型の構造を定義するクラス)の依存性反転

だから私はこのデータクラスを持っています:

最近のプロジェクトのプロパティを定義するだけで、依存関係の反転を適用したかったので、クラスからインターフェイスを抽出しました。

次に、iocコンテナ(制御の反転)を作成し、クラスタイプをインターフェースとして登録しました:

最近のプロジェクトを作成したいときは、アプリのどこでも使用できます:

しかし、これを行った後、現在のセットアップでは解決するのが難しいいくつかの問題に遭遇したため、依存関係の反転の利点が次のように適用されないため、このクラスで依存関係の反転を適用する正しい方法ではない可能性があると考えました。

  • 単体テスト: データ クラスの単体テストは行わないため
  • クラスの実装を変更する機能: クラスに変更を加えると、追加された新機能を使用できるようにインターフェイスを変更する必要があります。

どうすればいいですか、このトピックについてたくさん検索しましたが、明確な答えが見つかりません
でした。助けてください。事前に感謝します。

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

c# - すべてに工場を使用していますか?

私のソフトウェアは、1 つまたは複数のデバイスを制御します。プログラム フローは、使用可能なすべてのインターフェイスでデバイスを検索し、IDevice見つかった各デバイスのタイプのオブジェクトをインスタンス化するようなものです。ここで言うと、これらのオブジェクトはすべて実行時に設定する必要があります。

Autofac を使用して依存関係の逆転 (DI) を取得するには、最初にすべてを設定する必要があります。実行時に何かを使用する場合は、「ファクトリ」を使用します。それでは、例を掘り下げてみましょう。

プログラムの開始は次のようになります。

「アプリケーション」が解決されるとすぐに、開始時にわかっているすべての設定が行われます。その後、アプリケーションが開始され ( app.Run())、デバイスが検索され、見つかったすべてのデバイスのリストが設定されます。デバイスをセットアップするには、基本的に(そしてここに問題があります)「デバイス」を介してインスタンス化される「クラスごとに1つ」という一連の「ファクトリ」が必要です。

「デバイス」には、何かを追跡するロガーが含まれています。この例では、時間とインシデントを記録します。そのため、新しいログが設定されるとすぐに、いくつかのファクトリを注入する必要があります。

さて、これは実際にはもっと多くのものを統合するデバイス クラスのほんの一部です。そして、それは今再び乱雑になっているということです。

「デバイス」をインスタンス化するときに設定される約 30 個以上のサブクラスがあります。したがって、それらは実行時に設定されるため、「デバイス」のコンストラクターを介して提供する必要がある「ファクトリー」がすべて必要になります。要点がわかると思います。

どのように対処しますか?それともまた間違った道を進んでいますか?すべてへの依存を逆転させようとして、何かを誤解していませんか?

もう 1 つのポイントは、インターフェイスと autofac がキーワードである、ストーリー全体がテスト可能になろうとしているということです。しかし、ファクトリを使用するときは常にそれ自体のクラスを使用する必要があり、そのインターフェイスを参照として使用することはできません。その時点で DI は実装されていません。... ?

MyClass.Factoryそれを使用すると、代わりにIMyClass.Factory次のものが必要になります。

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

asp.net-core - 依存性逆転の原則。ASP.NET Core 5 で直接参照されていないプロジェクトのクラスにアクセスできるのはなぜですか?

ソリューションに 4 つのプロジェクトがあるとします。

  • UI <- スタートアップ プロジェクト
  • ドメイン
  • リポジトリ
  • ブート

プロジェクトにはおよびプロジェクトへのUI依存関係があります。DomainBoot

プロジェクトには、DI コンテナー構成のおよびプロジェクトへのBoot依存関係があります。DomainRepository

これを ASP.NET Core 5 で記述した場合、プロジェクトに依存関係がなくても、UIコードはクラスにアクセスしてインスタンス化できます。RepositoryUI

.NET Framework 4.8 では、これは発生しませんでした。この動作は分離を不可能にするため、この構成の依存性逆転の原則は簡単に破ることができます。

ASP.NET Core 5 でその動作をオフにする方法はありますか?