2

私は、MVVMパターンをコアファセットに分割し、それらのファセットを1つずつ学習することで、自分自身にMVVMパターンを教えているところです。

私の質問は依存性注入に関連しています。それは何ですか、そしてなぜ/いつそれを使うべきですか?Jason Dolingerの優れたMVVMイントロビデオを見たところ、彼がUnityを使用していることがわかりました。これを尋ねるのは奇妙かもしれませんが、Unityを使用せずに依存性注入を実装するにはどうすればよいですか?基本的に、依存性注入の概念と、他のフレームワーク/ツールを実装せずにそれを使用する方法を理解したいと思います(今のところ)。

ありがとう。

4

2 に答える 2

2

フレームワークを使わずにDIを理解したいのは良いことだと思います。コンセプトはそれほど難しくありません。

なんらかの交通手段を利用したいとします。

interface ITransportation 
{
  Transport();
}

ある形式の輸送を使用するメソッドの最初の実装は、次のようになります。

public void Move()
{
  ITransportation car = new Car();
  car.Transport();
}

このメソッドの問題は、Carクラスに依存していることです。柔軟性を高めるために、輸送オブジェクトを渡す必要があります。これは制御の反転であり、DIと密接に関連しています。

public void Move(ITransportation tr)
{
  tr.Transport();
}

ご覧のとおり、特定のDIフレームワークについて何も知る必要はありません。また、手動チュートリアルでninjectDIを確認することもできます。

于 2012-06-03T17:25:21.710 に答える
0

@Andyの答えを拡張するだけです

依存性注入は、依存性逆転の原則の形式の1つです。

依存関係の分離を実現するために(通常、階層化アーキテクチャで見られるように)、DIは、基本的なnew()やFactoryメソッドなどのパターンなどのインスタンス化シナリオで一般的に使用されます。毎回新しい依存関係インスタンスを挿入できることに加えて(たとえば、ファクトリなど)、名前付きインスタンス、シングルトンインスタンスなどを挿入するようにコンテナを設定することもできます。つまり、IoCコンテナは通常、オブジェクトの寿命を管理する責任も負います。同じように。

潜在的な「考え方の変化」の1つは、DIが通常、コンストラクターまたはパブリックGet / Setプロパティを介して注入するため、依存関係が具象クラスで公開される可能性があることです。これは、オブジェクト指向カプセル化の使用に慣れている場合は奇妙に思えるかもしれません。この場合、クラスの依存関係は実装と見なされ、「外部」、つまりクラスメソッドのシグネチャから隠す必要があります。ただし、インターフェイス/具象クラス分離を実装することにより(必要に応じて、デカップリングだけでなく、テスト/モックの目的でも)、インジェクションコンストラクター/プロパティインジェクションメソッドはインターフェイス上にないため、カプセル化が再び行われます。

Re:Unityなどを使わずに「手作業でDIを行う」

あなたがする必要があるのはあなた自身のIoCコンテナをコーディングすることです、そしてそれはクラスの「ビルドアップ」インスタンスを担当します-各「ビルドアップ」の間に、あなたは依存関係(例えばコンテナで設定されている)のためにクラスをスキャンします構成、属性、または単に慣例によって、たとえば、すべてのパブリック設定可能プロパティ、またはコンストラクターのクラスパラメーターは依存関係であると見なされます)。次に、(必要に応じて)この「依存関係」インスタンスを作成してオブジェクトに挿入します(たとえば、リフレクションを使用します)。そして、再帰的に、これらの依存関係のすべての依存関係を構築する必要があります。次に、シングルトンなどの各オブジェクトの寿命管理も提供する必要があります。

于 2012-06-03T18:50:02.253 に答える