質問編集履歴

3 Subject

退会済みユーザー

退会済みユーザー

2017/05/17 18:38  投稿

DIコンテナの作り方について
単純な疑問なのですが、DIコンテナというのはどのように作るのでしょうか?
以下は普通にコンストラクタを通して依存性を注入するサンプルコードです。
※TypeScriptは長いこと書いていなかったので、間違っていたらすみません。。。
DIコンテナを作ると、コンストラクタの引数に依存するクラスのインスタンスを手動で渡してあげなくても、勝手にDIされる訳ですよね!?
それがどういう仕組みで実現されるのかがマジカルでわかりません。
このクラスにはこのクラスが依存するみたいなマッピングを、DIコンテナクラスみたいなところで行うのかなとは思ったりするのですが、どういう流れで依存先のクラスに自動で依存するクラスのインスタンスが注入されるのかがわかりません。
簡易的なものでも作れるようになれば理解が深まるとは思っているのですが、簡易的なものすら、どのように作ってよいやら。。。
ご存知の方がおりましたら、ご教授頂けるとありがたいです!
```TypeScript
interface Sendable {
   send(): void;
}
class GmailSender implements Sendable{
   public send() {
       console.log("send a gmail");
   }
}
class HotmailSender implements Sendable {
   public send() {
       console.log("send a hotmail");
   }
}
class Subject {
   private mailer: Sendable;
   constructor(mailer: Sendable) {
       this.mailer = mailer;
   }
   public send() {
       this.mailer.send();
   }
}
let sender = new GmailSender();
let subject = new Subject(sender);
controller.send();
subject.send();
```
  • Java

    18035 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • PHP

    27444 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    24447 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Ruby

    11312 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • DI (Dependence Injection)

    22 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

2 Subject

退会済みユーザー

退会済みユーザー

2017/05/17 18:37  投稿

DIコンテナの作り方について
単純な疑問なのですが、DIコンテナというのはどのように作るのでしょうか?
以下は普通にコンストラクタを通して依存性を注入するサンプルコードです。
※TypeScriptは長いこと書いていなかったので、間違っていたらすみません。。。
DIコンテナを作ると、コンストラクタの引数に依存するクラスのインスタンスを手動で渡してあげなくても、勝手にDIされる訳ですよね!?
それがどういう仕組みで実現されるのかがマジカルでわかりません。
このクラスにはこのクラスが依存するみたいなマッピングを、DIコンテナクラスみたいなところで行うのかなとは思ったりするのですが、どういう流れで依存先のクラスに自動で依存するクラスのインスタンスが注入されるのかがわかりません。
簡易的なものでも作れるようになれば理解が深まるとは思っているのですが、簡易的なものすら、どのように作ってよいやら。。。
ご存知の方がおりましたら、ご教授頂けるとありがたいです!
```TypeScript
interface Sendable {
   send(): void;
}
class GmailSender implements Sendable{
   public send() {
       console.log("send a gmail");
   }
}
class HotmailSender implements Sendable {
   public send() {
       console.log("send a hotmail");
   }
}
class Controller {
class Subject {
   private mailer: Sendable;
   constructor(mailer: Sendable) {
       this.mailer = mailer;
   }
   public send() {
       this.mailer.send();
   }
}
let sender = new GmailSender();
let controller = new Controller(sender);
let subject = new Subject(sender);
controller.send();
```
  • Java

    18035 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • PHP

    27444 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    24447 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Ruby

    11312 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • DI (Dependence Injection)

    22 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

1 @

退会済みユーザー

退会済みユーザー

2017/05/17 18:28  投稿

DIコンテナの作り方について
単純な疑問なのですが、DIコンテナというのはどのように作るのでしょうか?
以下は普通にコンストラクタを通して依存性を注入するサンプルコードです。
※TypeScriptは長いこと書いていなかったので、間違っていたらすみません。。。
DIコンテナを作ると、コンストラクタの引数に依存するクラスのインスタンスを手動で渡してあげなくても、勝手にDIされる訳ですよね!?
それがどういう仕組みで実現されるのかがマジカルでわかりません。
このクラスにはこのクラスが依存するみたいなマッピングを、DIコンテナクラスみたいなところで行うのかなとは思ったりするのですが、どういう流れで依存先のクラスに自動で依存するクラスのインスタンスが注入されるのかがわかりません。
簡易的なものでも作れるようになれば理解が深まるとは思っているのですが、簡易的なものすら、どのように作ってよいやら。。。
ご存知の方がおりましたら、ご教授頂けるとありがたいです!
```TypeScript
interface Sendable {
   send(): void;
}
class GmailSender implements Sendable{
   public send() {
       console.log("send a gmail");
   }
}
class HotmailSender implements Sendable {
   public send() {
       console.log("send a hotmail");
   }
}
class ViewController {
class Controller {
   private mailer: Sendable;
   constructor(mailer: Sendable) {
       this.mailer = mailer;
   }
   public send() {
       this.mailer.send();
   }
}
let sender = new GmailSender();
let viewController = new ViewController(sender);
viewController.send();
let controller = new Controller(sender);
controller.send();
```
  • Java

    18035 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • PHP

    27444 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    24447 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Ruby

    11312 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • DI (Dependence Injection)

    22 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る