イム学習のasp.net MVC依存性注入された新機能の3つ。誰かがそれが何であるか教えてもらえますか?それはなぜ有用ですか?いつ使用するのですか?おそらく多くのプログラマに適しますが、最初に学ぶコントロール
http://en.wikipedia.org/wiki/Inversion_of_control
http://www.martinfowler.com/articles/injection.html
の反転についてのおかげ
イム学習のasp.net MVC依存性注入された新機能の3つ。誰かがそれが何であるか教えてもらえますか?それはなぜ有用ですか?いつ使用するのですか?おそらく多くのプログラマに適しますが、最初に学ぶコントロール
http://en.wikipedia.org/wiki/Inversion_of_control
http://www.martinfowler.com/articles/injection.html
の反転についてのおかげ
アイデア部品が/取得する方法を知っているその依存関係を作成するべきではないということです、仕事を遂行するために必要なものを提供する必要があります。
依存性注入とは、オブジェクト自体のインスタンス化を担当するコードではなく、依存コードを消費するコードに提供されるプロセスです。基本的な例では、レンダリングされたサービスの請求書を計算するクラスを持つことができます。
public class InvoiceBiller
{
public void Bill()
{
Calculator calculator = new Calculator();
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
このメソッドは、Calculatorクラスに依存しています。それは問題ありません。しかしdepenedency注射あなたは電卓の依存関係を「注入」しているでしょう:あなたが第二の例で見ることができるように
public class InvoiceBiller
{
private readonly Calculator calculator;
public InvoiceBiller(Calculator calculator)
{
this.calculator = calculator;
}
public void Bill()
{
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
InvoiceBillerクラスは、コンストラクタ(コンストラクタ・インジェクションと呼ばれる依存性注入の形)を介して、電卓のオブジェクトを与えています。 InvoiceBillerは、もはや請求者のインスタンスを取得する方法には関係なく、単にそれを与えられます。
これはテストに役立ちます。あなたはあなたのテストからあなたが望む電卓のあらゆるインスタンスを渡すことができます。実際の製品の実行時には、データベースに接続された電卓を渡して、時間別料金を調べることができます。テストのために、ハードコードされたレートを使用する電卓を渡すことで、テストがデータベースにヒットする必要はありません。
さらに一歩これを取ると、あなたは一般的に代わりに、具体的なタイプのインタフェースに渡します
public class InvoiceBiller
{
private readonly ICalculator calculator;
public InvoiceBiller(ICalculator calculator)
は今、あなたはインターフェースではない実装に対してプログラミングをしています。テストからも、モックフレームワークを使用してインタフェースタイプのモックを作成し、それらをクラスに渡すことができます。
実際、ここには2つの質問があります。 「依存性注射とは何か?」 「MVC 3の新機能は「依存性注入のサポートを増やしていますか?」です。
依存性注入は、クラスがそれらを使用する前に他のクラスの新しいオブジェクトを定義しない場合のプログラミングパターンです(DB内の電子メールをログに記録する必要のある電子メール送信者クラスはLoggerの新しいインスタンスを作成しません)それがどのクラスであってもわからなくても提供することができます(私たちの場合はILoggerというインターフェースを使用します)。ここでのロガーは依存関係になります。この依存関係は、依存クラス(たとえばEmailSender)のコンストラクターパラメーターとして要求されるか、または単にクラスの「設定」アクセサ上のプロパティにするなど、さまざまな方法で要求/等...
依存性注入ライブラリと呼ばれるライブラリやInversion Of Control Containerがあります。それらは、実際に実行時に使用するクラスと使用するその他の特定の値を定義し、オブジェクトを作成するように(EmailSenderのインスタンスを作成するなど)、すべての依存関係を再帰的に渡すようにするライブラリです(したがって、 ILoggerが実際に接続文字列を必要とするDBLoggerであれば、それも送信します。
http://tekpub.com/view/concepts/1
、ASP.NET MVCチームで働くために使用される男からこの素敵な無料のビデオを見る...ウィンザー、Ninject、Autofac、マイクロソフトユニティ、あります
ASP.NET MVCは常にControllerクラスの作成方法をオーバーライドすることができるファクトリクラスを許可しています(DIコンテナライブラリを使用してコントローラまたはその依存関係を作成することができます)。どのようなASP.NET MVC 3.0になったことは、既存の機能に対する改良とそれのような多くの方法を提供し、それはすべての
と
ASP.NET MVC 3 Service Location: Views (Part 3)
重複[依存性注入とは?](http://stackoverflow.com/questions/ 130794/what-is-dependency-injection) – jfar