回答編集履歴
3
コード修正
test
CHANGED
@@ -10,11 +10,11 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
下記コードの内、WantFunctionが注入される側のオブジェクトで、ProgramクラスのMainメソッドがオブジェクト
|
13
|
+
下記コードの内、WantFunctionが注入される側のオブジェクトで、ProgramクラスのMainメソッドが注入する側のオブジェクトで、そのメソッドの内、fというFuncオブジェクトが実際に注入するオブジェクトです。
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
今回の場合、DebugとReleaseを変え
|
17
|
+
今回の場合、DebugとReleaseを構成を変えることで、注入するオブジェクトを切り替えることができます。
|
18
18
|
|
19
19
|
(今回はifプリプロセッサを使って構成変更時に注入するオブジェクトを変更していますが、変更できれば手段は何でも構いません)
|
20
20
|
|
@@ -38,15 +38,15 @@
|
|
38
38
|
|
39
39
|
//NOTE: ところで、パラメータがないのは意図通りでしょうか?
|
40
40
|
|
41
|
-
Func<string,bool>
|
41
|
+
Func<string,bool> f = dir => Injection.DirectoryExists();
|
42
42
|
|
43
43
|
#else
|
44
44
|
|
45
|
-
Func<string,bool>
|
45
|
+
Func<string,bool> f = dir => Directory.Exists(dir);
|
46
46
|
|
47
47
|
#endif
|
48
48
|
|
49
|
-
var injected = new WantFunction<string,bool>(
|
49
|
+
var injected = new WantFunction<string,bool>(f);
|
50
50
|
|
51
51
|
Console.WriteLine(injected.CallInjectedFunction("hoge"));
|
52
52
|
|
@@ -58,13 +58,13 @@
|
|
58
58
|
|
59
59
|
|
60
60
|
|
61
|
-
public class WantFunction<T
|
61
|
+
public class WantFunction<T,TResult>
|
62
62
|
|
63
63
|
{
|
64
64
|
|
65
|
-
private readonly Func<T
|
65
|
+
private readonly Func<T,TResult> _func;
|
66
66
|
|
67
|
-
public WantFunction(Func<T
|
67
|
+
public WantFunction(Func<T, TResult> func)
|
68
68
|
|
69
69
|
{
|
70
70
|
|
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
public T
|
77
|
+
public TResult CallInjectedFunction(T t)
|
78
78
|
|
79
79
|
{
|
80
80
|
|
2
bug
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
#else
|
44
44
|
|
45
|
-
Func<string,bool> inject = Directory.Exists(dir);
|
45
|
+
Func<string,bool> inject = dir => Directory.Exists(dir);
|
46
46
|
|
47
47
|
#endif
|
48
48
|
|
1
文章の修正(学習コストがあるので、簡単かどうか言われるとちょっと怪しい気がしてきた)
test
CHANGED
@@ -16,11 +16,11 @@
|
|
16
16
|
|
17
17
|
今回の場合、DebugとReleaseを変えてビルドすることで、注入するオブジェクトを切り替えることができます。
|
18
18
|
|
19
|
-
(注入する
|
19
|
+
(今回はifプリプロセッサを使って構成変更時に注入するオブジェクトを変更していますが、変更できれば手段は何でも構いません)
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
このDIを活用して
|
23
|
+
このDIを活用しても自作のスタブへ差し替えることができます。
|
24
24
|
|
25
25
|
|
26
26
|
|
@@ -108,4 +108,4 @@
|
|
108
108
|
|
109
109
|
DIに慣れてくると場合によっては注入するそれぞれのインスタンスの有効期間を変えたいことがあるように、より小回りが利くDIがしたいときもあるかもしれません。
|
110
110
|
|
111
|
-
そのときは DIコンテナ と呼ばれるフレームワーク
|
111
|
+
そのときは DIコンテナ と呼ばれるフレームワークを触ってみると良いかもしれません。
|