6

.Netで Inversion of Control (Ioc) の原則を使用している人を耳にすることはめったにありません。Spring と PicoContainer でより多くの Ioc を使用する Java で作業する友人が何人かいます。

コードから依存関係を削除するという原則は理解していますが、それがはるかに優れているとは思えません。

.Net プログラマーがこれらのタイプのフレームワークを使用しない (または使用しない) のはなぜですか? もしそうなら、本当に長期的にプラスの効果を見つけますか?

4

7 に答える 7

6

多くの人が .NET で IOC を使用しており、IoC の使用を支援するために利用できるフレームワークがいくつかあります。Visual Studio でフォームを設計している場合、コンテナーにすべてを接続させるのは難しいため、WinForms 側ではあまり見られないかもしれませんが、少なくとも私が働いているサーバー側の .NET アプリケーションについてはそう言えます。 、IoCは非常にうまく使用されています。

.NET で使用する理由 同じ理由で、他の場所でも使用します。私が気に入っている2つの大きなものは次のとおりです。

  • IoC 向けの設計は、優れたコーディング プラクティスを強制する傾向があります。つまり、インターフェース、低結合、高結束に合わせた設計です。これは、単体テストが非常に簡単なクラスにもつながります。
  • 多くの場合、システム構成は再コンパイルせずに変更できます。

.NET で使用できるさまざまな IoC/DI フレームワークについて説明している他の投稿:

于 2008-10-30T15:01:57.413 に答える
4

私は依存関係の注入にStructureMapを使用していますが、実行時にドメイン オブジェクト マッパーを注入するためにiBATIS.NETで使用し始めたのはつい最近のことです (XML 構成ファイルを介してではありません)。

私はすぐに利益を見てきました。すべてのマッパー ( など) のインターフェイスを作成し、 MoqIPersonMapperを追加することで、データベースを使用しない非常に優れた単体テストをすばやく簡単に作成できます。

以前 (.NET 1.0) は、主にリフレクションについて学ぶために独自のプラグイン システムを作成しました。それ以来、私は自分のプロジェクトにある種の IoC を実装してきました。ほんの最近、ユニットテストを書くのがずっと楽になるように IoC を使い始めました。この時点で、他の方法でそれを行うことは想像できませんでした。

于 2008-10-30T15:03:05.303 に答える
2

IoC は、これまで .Net ではそれほど一般的ではありませんでした。そして、それはマイクロソフトと彼らが行ったプロモーションキャンペーンと関係があります. これまで、彼らは VS の RAD 機能をより強調しており、その間に IoC や Di などを促進することを忘れていましたが、現在は Unity と呼ばれる独自のフレームワークを持ち、ASP.Net MVC で行った作業を行っています。

だから、大多数の人がそのようなものを使い始めると思います。彼らが使用するMSの代替手段を持っていることを知っているからです。

そしてストラクチャーマップを使っています。

于 2008-10-30T15:05:58.950 に答える
1

それはより一般的になっています。私の現在のプロジェクトでは Spring を使用しており、以前のプロジェクトではキャッスル ウィンザーを使用していました。

ここで、複雑な XML 宣言をすべて回避するために、「設定より規約」の考え方を使用したいと思います。

于 2008-10-30T15:09:16.493 に答える
1

IoC .NET の使用に関連する多くの理論があります。この分野での経験がない開発者はかなりの数いると思います。彼らは Java のバックグラウンドを持っていませんでした。彼らは古典的な ASP と VB6 の背景から来ました。また、Microsoft は最近まで IoC の使用を実際に促進していませんでした。

さらに、IoC の使用にはいくつかの前提があります。まず、それが何に使用され、何を得るかを理解する必要があります。次に、IoC コンテナーを実際に使用できるようにコードを開発する必要があります。

IoC は、ツールボックスの別のアイテムを使用するだけではありません。使い方を知り、いつ使うべきかを知り、開発者として成熟することです。

.NET に関連するので、いくつかの IoC コンテナーがあります。私は Windsor、StructureMap、Unity、そして最近では Ninject を使用しました。ただし、すべてを実際のアプリケーションで使用したわけではないことに注意してください。私は遊んで、そこで何が起こっているかを見るのが好きです。私は、IoC コンテナー .NET の市場が非常に良好であることを発見しました。

于 2008-10-30T15:13:21.993 に答える
0

これを使用して、単体テストが実際にテスト用に記述された 1 つの class.method のコードのみを実行およびテストできるように、単体テストでモック クラス (実際の運用クラスをシミュレートする) を上流の依存オブジェクトに置き換えます。

于 2008-10-30T17:46:16.210 に答える
0

LinFu.IOC 2.0 を試してください:

http://www.codeproject.com/KB/cs/LinFu_IOC.aspx

これは最も柔軟な IOC コンテナーの 1 つであり、Ninject と同様に、維持する XML ファイルはありません。ただし、Ninject とは異なり、LinFu では、依存関係を結び付けるためにバインド コードを記述する必要はありません。見てください!:)

于 2008-12-18T09:15:56.820 に答える