[C#] dependency injection (依存関係の挿入)

dependency injectionというとJavaのフレームワークの話題というイメージがある。概念自体はオブジェクト指向の要素を持つフレームワークに共通の話題なのでC#でも状況は同じはず、と考えて探したところ、msdnで以下のblogを見つけた。

https://msdn.microsoft.com/en-us/library/aa973811.aspx

Inversion of Control and Dependency Injection: Working with Windsor Container

上記のページにリンクされているマーティン・ファウラーの書いたものを見るとidependency injectionという概念がでてくるきっかけとなったinversion of controlはいつからか業界内で広く使われていた用語でデザインパターンの本にも使われている。Frameworkの説明の中で以下のような記述がある。(旧版では27ページの5行目)

Reuse on this level leads to an inversion of control between the application and the software on which it’s based.

このレベル(コードよりもデザインのリユースに重きを置く)のリユースはアプリケーションとその下にあるソフトウェアの間の制御を逆転することにつながる、とフレームワークを使うと呼ばれる部分を書くのがアプリケーションソフトウェアの分担になることを説明している。ここで an inversion of control と不定冠詞を付けている。概念は普通にあるもの(公知であって新規ではない)と考えているようだ。

ファウラーのInversion of Control Containers and the Dependency Injection patternではフレームワークがinversion of controlを持つのは当然なので”what aspect of control are they inverting?”が重要な問いだと書いている。ファウラーからすると Inversion of Controlという言葉が一般的でいろんなものが該当するので、より具体的で限定的な Dependency injectionという用語を導入する、ということらしい。これをさらに constructor injection, setter injectionなどに分類し使い方を説明している。

msdnの記事のIoC(Inversion of Controlの略)を IoT(internet of things)と読み違えて「IoTのフレームワークをこっちに応用するよ、っていう話なのかな?」と途中まで勘違いしていた。

msdnの記事は実装にやや近いのでdependency injectionだけが知りたいならファウラーの記事がわかりやすかった。

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。