Dependency Injection Pattern(依存性の注入)
2017/10/02
AngularJSでも使いまくり。
DIと略されていたり。
IoCの一種だそうです。
言葉は難しいですがやっていることは単純。
依存性とか言わずに依存オブジェクトの注入と言ってくれると分かりやすいとのにと思います。
リンク先の日本語ページが消えてました(2018/06/25現在)。英語版もprevious-versionsの中に移動しています。
また消えると面倒なので画像もらってきましたm(_ _)m。
ClassAを呼び出す側(Builder)が依存性(IServiceAを実装したクラス)を注入。
// 上図のClassAの例(コンストラクタで注入する場合) public class NewsReaderPresenter : INewsReaderPresenter { // 依存クラス(上図ではIServiceA) private readonly INewsReaderView view; // コンストラクタで依存クラスを受け取る public NewsReaderPresenter(INewsReaderView view) { this.view = view; } public INewsReaderView View { get { return this.view; } } … }NewsReaderPresenterクラスは自分でビューを作成せず呼び出す側がコンストラクタで指定したviewを使う。
呼び出す側は求められているビューの仕様(INewsReaderView)に合わせたビューを作成し渡す。
こじつけ
プレゼンターが仕事をしようとするとビューが必須(ビューに依存)。そのビューを外部から受け取る。
呼び出す側はビュー(依存性)を注入できる。
Prismでの利用
各所で使われている。NugetでPrismインストール時にDIフレームワークの選択を迫られる。
使い慣れた好みのフレームワークが無いのであればUnityが無難。