1
using System;
2
using System.Globalization;
3
using Microsoft.Practices.ObjectBuilder.Properties;
4![](/Images/OutliningIndicators/None.gif)
5
namespace Microsoft.Practices.ObjectBuilder
6![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
7![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
8
/// 该类用于提供获取
9
/// "依赖对象" 的功
10
/// 能。
11
/// </summary>
12
/// <remarks>
13
/// 该类只在 "创建
14
/// 上下文" 提供的
15
/// "定位器" 中查
16
/// 找 "依赖对象"。
17
/// </remarks>
18
public class DependencyResolver
19![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
20![](/Images/OutliningIndicators/InBlock.gif)
21![](/Images/OutliningIndicators/ContractedSubBlock.gif)
字段#region 字段
22![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
23
/// 创建上下文,用于
24
/// 获取 "依赖对象"。
25
/// </summary>
26
private IBuilderContext _context;
27
#endregion
28![](/Images/OutliningIndicators/InBlock.gif)
29![](/Images/OutliningIndicators/ContractedSubBlock.gif)
构造函数#region 构造函数
30![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
31
/// 初始化 <see cref="DependencyResolver"/> 类新实例。
32
/// </summary>
33
/// <param name="context">
34
/// 创建上下文,<see cref="DependencyResolver"/>
35
/// 类将从该 "上下文"
36
/// 中获取 "依赖对象"。
37
/// </param>
38
public DependencyResolver(IBuilderContext context)
39![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
40
if (context == null)
41![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
42
throw new ArgumentNullException("context");
43
}
44![](/Images/OutliningIndicators/InBlock.gif)
45
_context = context;
46
}
47
#endregion
48![](/Images/OutliningIndicators/InBlock.gif)
49![](/Images/OutliningIndicators/ContractedSubBlock.gif)
公有方法#region 公有方法
50![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
51
/// 获取 "依赖对象"。
52
/// </summary>
53
/// <param name="typeToResolve">
54
/// 要获取的 "依赖
55
/// 对象" 的类型。
56
/// </param>
57
/// <param name="typeToCreate">
58
/// 当缺少 "依赖对
59
/// 象" 时(并且 <paramref name="notPresent"/>
60
/// 值为 <see cref="NotPresentBehavior.CreateNew"/>
61
/// ),要创建的新
62
/// "依赖对象" 的
63
/// 类型。
64
/// </param>
65
/// <param name="id">
66
/// 要获取的 "依赖
67
/// 对象"的 Id。传
68
/// 递 null 表示匿
69
/// 名的 "依赖对象"。
70
/// </param>
71
/// <param name="notPresent">
72
/// 表示当缺少 "依赖
73
/// 对象" 时执行的动
74
/// 作。
75
/// </param>
76
/// <param name="searchMode">
77
/// 表示 "搜索" 是否
78
/// 向上回溯的标志。
79
/// </param>
80
/// <returns>
81
/// 要获取的 "依赖对
82
/// 象" 。如果 "依赖
83
/// 对象" 没有找到并
84
/// 且 <paramref name="notPresent"/>
85
/// 的参数值为 <see cref="NotPresentBehavior.ReturnNull"/>,
86
/// 则返回 null。
87
/// </returns>
88
/// <remarks>
89
/// 代码流程:
90
///
91
/// 1、如果没有指定 typeToCreate
92
/// 参数(值为 null),
93
/// 则认为该参数的值
94
/// 与要获取的 "依赖
95
/// 对象" 的类型一致。
96
///
97
/// 2、使用指定的 "搜索
98
/// 模式" 在 "定位器"
99
/// 中查找 "依赖对象"。
100
///
101
/// 3、如果没有在 "定位
102
/// 器" 中找到 "依赖
103
/// 对象", 则根据 notPresent
104
/// 参数的值执行相应
105
/// 的动作。
106
/// </remarks>
107
public object Resolve(
108
Type typeToResolve,
109
Type typeToCreate,
110
string id,
111
NotPresentBehavior notPresent,
112
SearchMode searchMode)
113![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
114
if (typeToResolve == null)
115![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
116
throw new ArgumentNullException("typeToResolve");
117
}
118![](/Images/OutliningIndicators/InBlock.gif)
119
if (!Enum.IsDefined(typeof(NotPresentBehavior), notPresent))
120![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
121
throw new ArgumentException(Resources.InvalidEnumerationValue, "notPresent");
122
}
123![](/Images/OutliningIndicators/InBlock.gif)
124
if (typeToCreate == null)
125![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
126
typeToCreate = typeToResolve;
127
}
128![](/Images/OutliningIndicators/InBlock.gif)
129
DependencyResolutionLocatorKey key = new DependencyResolutionLocatorKey(typeToResolve, id);
130![](/Images/OutliningIndicators/InBlock.gif)
131![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
132
* 首先,在 "定位器"
133
* 中查找 "依赖对象",
134
* 如果找到,则返回
135
* 该 "依赖对象"。
136
*/
137
if (_context.Locator.Contains(key, searchMode))
138![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
139
return _context.Locator.Get(key, searchMode);
140
}
141![](/Images/OutliningIndicators/InBlock.gif)
142![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
143
* 如果走到这里,则
144
* 表示没有找到 "依
145
* 赖对象"。
146
*/
147
switch (notPresent)
148![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
149
case NotPresentBehavior.CreateNew:
150![](/Images/OutliningIndicators/InBlock.gif)
151![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
152
* 创建新的 "依赖对
153
* 象"。
154
*/
155
return _context.HeadOfChain.BuildUp(
156
_context,
157
typeToCreate,
158
null, // null 表示创建新的 "依赖对象"。
159
key.ID);
160![](/Images/OutliningIndicators/InBlock.gif)
161
case NotPresentBehavior.ReturnNull:
162
return null;
163
default:
164
throw new DependencyMissingException(string.Format(CultureInfo.CurrentCulture,Resources.DependencyMissing,typeToResolve.ToString()));
165
}
166
}
167
#endregion
168![](/Images/OutliningIndicators/InBlock.gif)
169
}
170
}
171![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
166
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
167
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
170
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
171
![](/Images/OutliningIndicators/None.gif)