回答編集履歴
3
最後の1行追記
answer
CHANGED
@@ -110,4 +110,5 @@
|
|
110
110
|
NinjectはDIコンテナだけど設定ファイルを使わないので、その分プログラマーには直観的だと思う。
|
111
111
|
ymlだのXMLだので設定ファイルを書いてインジェクションするよりよっぽど使うのが簡単なので、発想はC#未経験でもページを見ればわかると思う。
|
112
112
|
|
113
|
-
設定ファイルを書くDIコンテナは、設定ファイルを読み込んで動作を変更できるようにちょっと変えただけだ。
|
113
|
+
設定ファイルを書くDIコンテナは、設定ファイルを読み込んで動作を変更できるようにちょっと変えただけだ。
|
114
|
+
設定ファイルを使う場合は、現在アプリケーションに読み込まれてる型情報をリフレクションで取得しておいて、その情報に設定ファイルから得たオプションを適用していく、という形になるだろうね。
|
2
文章の修正
answer
CHANGED
@@ -86,7 +86,7 @@
|
|
86
86
|
```
|
87
87
|
|
88
88
|
情報を収集し、展開する。
|
89
|
-
|
89
|
+
収集方法は別にメソッドでもいいし、一般的なDIコンテナみたいになんらかのファイルでもいい。
|
90
90
|
基本は、あるインスタンスの生成方法を集積して、再帰的に呼ぶだけ。
|
91
91
|
インスタンス化できなければ情報不足として例外を投げればいい。
|
92
92
|
|
@@ -100,13 +100,14 @@
|
|
100
100
|
```C#
|
101
101
|
var container = new MyDIContainer();
|
102
102
|
|
103
|
+
// ISomeClassという型には、ImplemetedClassをインスタンス化してよこせ、と指示を出す。
|
103
104
|
container.Bind<ISomeClass>().To<ImplementedClass>();
|
104
105
|
|
105
106
|
var implemented = container.Get<ISomeClass>();
|
106
107
|
```
|
107
108
|
|
108
109
|
ちなみにこれはNinjectっていうC#のDIコンテナを僕が使っているのでその構造に強く影響を受けている。
|
109
|
-
NinjectはDIコンテナだけど
|
110
|
+
NinjectはDIコンテナだけど設定ファイルを使わないので、その分プログラマーには直観的だと思う。
|
110
111
|
ymlだのXMLだので設定ファイルを書いてインジェクションするよりよっぽど使うのが簡単なので、発想はC#未経験でもページを見ればわかると思う。
|
111
112
|
|
112
113
|
設定ファイルを書くDIコンテナは、設定ファイルを読み込んで動作を変更できるようにちょっと変えただけだ。
|
1
追記
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
下記は、今、このページで打っただけだから下記のコードはぐだぐだだけども、一通り必要そうなコードを書いてみた。
|
12
12
|
|
13
13
|
|
14
|
-
```
|
14
|
+
```C#
|
15
15
|
// あるクラスのインジェクションに関係する情報を集める
|
16
16
|
// これは関数で支持を出しても良いし、よりよい形ではリフレクションでも良い
|
17
17
|
BindingInfo<T> Bind<T>()
|
@@ -92,4 +92,21 @@
|
|
92
92
|
|
93
93
|
実行時の動作変更用のオプションの拡張、インスタンス化に関する情報のキャッシュで高速化だとか、まあそういう細かいのはいっぱいあるだろうと思う。
|
94
94
|
|
95
|
-
とりあえず… 既存のOSSのDIコンテナのソースを見よう!
|
95
|
+
とりあえず… 既存のOSSのDIコンテナのソースを見よう!
|
96
|
+
|
97
|
+
#追記
|
98
|
+
|
99
|
+
上のクラスの使い方の想定をかいてなかったね。
|
100
|
+
```C#
|
101
|
+
var container = new MyDIContainer();
|
102
|
+
|
103
|
+
container.Bind<ISomeClass>().To<ImplementedClass>();
|
104
|
+
|
105
|
+
var implemented = container.Get<ISomeClass>();
|
106
|
+
```
|
107
|
+
|
108
|
+
ちなみにこれはNinjectっていうC#のDIコンテナを僕が使っているのでその構造に強く影響を受けている。
|
109
|
+
NinjectはDIコンテナだけど、設定ファイルを使わない、その分プログラマーには直観的だと思う。
|
110
|
+
ymlだのXMLだので設定ファイルを書いてインジェクションするよりよっぽど使うのが簡単なので、発想はC#未経験でもページを見ればわかると思う。
|
111
|
+
|
112
|
+
設定ファイルを書くDIコンテナは、設定ファイルを読み込んで動作を変更できるようにちょっと変えただけだ。
|