回答編集履歴

3

コード修正

2021/03/12 10:33

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
 
12
12
 
13
- 下記コードの内、WantFunctionが注入される側のオブジェクトで、ProgramクラスのMainメソッドがオブジェクト(Injectionだったり、Directory.Existsだったり)を注入しています。
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> inject = dir => Injection.DirectoryExists();
41
+ Func<string,bool> f = dir => Injection.DirectoryExists();
42
42
 
43
43
  #else
44
44
 
45
- Func<string,bool> inject = dir => Directory.Exists(dir);
45
+ Func<string,bool> f = dir => Directory.Exists(dir);
46
46
 
47
47
  #endif
48
48
 
49
- var injected = new WantFunction<string,bool>(inject);
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<T1,T2>
61
+ public class WantFunction<T,TResult>
62
62
 
63
63
  {
64
64
 
65
- private readonly Func<T1,T2> _func;
65
+ private readonly Func<T,TResult> _func;
66
66
 
67
- public WantFunction(Func<T1, T2> func)
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 T2 CallInjectedFunction(T1 t)
77
+ public TResult CallInjectedFunction(T t)
78
78
 
79
79
  {
80
80
 

2

bug

2021/03/12 10:33

投稿

BluOxy
BluOxy

スコア2663

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

文章の修正(学習コストがあるので、簡単かどうか言われるとちょっと怪しい気がしてきた)

2021/03/12 09:59

投稿

BluOxy
BluOxy

スコア2663

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コンテナ と呼ばれるフレームワークを触ってみると良いかもしれません