マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

DI

DI: Dependency Injection(依存性の注入)

  • Dependency InjectionのDependencyは依存性と訳すと誤解を生む。
  • 正確には「使われるオブジェクト」(依存オブジェクト)という意味。

DIとは?

依存性を無くすために、動的に動作を注入する。

依存性

  • あるクラスに、固定の定数、変数、インスタンスが入っている状態
  • つまりそのクラスは、その定数、変数、インスタンスに依存している。

注入

  • そのクラスの外から定数、変数、インスタンスを設定する。
  • これにより、動的に動作を変えられるようにする。

ユースケース

※「依存性がコアの懸念で、AOPのアスペクトとはコアの懸念ではない。」と言う意見もある。

IoC」, 「AOP」の実現

IoC」, 「AOP」を実現する技術の一つ。

依存性反転原則」の実現

依存性反転原則を実現する技術の一つ。

  • モックの差し替え
    モックの差し替えなどを実現し、テストを容易にする。
  • フレームワークの差し替え
    フレームワークの差し替えを実現し、特定のフレームワークへの依存性を減らす。

詳細

DIの種類

プログラムに依存性を注入する方法としては、以下のような手法が存在する。

interface注入

注入用のinterfaceを定義して注入を行う方法

setter 注入

setter メソッドを定義して注入を行う方法

constructor注入

constructorを定義して注入を行う方法

コンテナー

  • 依存関係を作成する専用のクラス。
    • 要求された依存関係をインスタンスの作成で行う。
      • 依存関係はハードコーディングではなく、構成により宣言。
      • 依存関係のある型のインスタンスを提供するファクトリ。
    • 依存関係だけでなく、ライフサイクルも管理する。
  • 以下のように呼ばれる。
    • 制御の反転 (IoC) コンテナー
    • 依存関係の挿入 (DI) コンテナー

その他

問題点

IoC」や「AOP」、「依存性反転原則」自体にも言えるが、
同時に全体として協調動作させるときに複雑さが増す。

実現方法

.NETにおけるDI

  • Spring .NETによりサポートされていた模様。

参考

Qiita

ASP.NET Core における DI


Tags: :プログラミング, :.NET開発


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-02 (木) 16:03:58 (415d)