/
RegistryTester.cs
255 lines (209 loc) · 6.67 KB
/
RegistryTester.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
using Shouldly;
using StructureMap.Graph;
using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget3;
using System;
using System.Linq;
using Xunit;
namespace StructureMap.Testing.Configuration.DSL
{
public class RegistryTester
{
public class RedGreenRegistry : Registry
{
public RedGreenRegistry()
{
For<IWidget>().Add<ColorWidget>().Ctor<string>("color").Is("Red").Named(
"Red");
For<IWidget>().Add<ColorWidget>().Ctor<string>("color").Is("Green").Named(
"Green");
}
}
public class YellowBlueRegistry : Registry
{
public YellowBlueRegistry()
{
For<IWidget>().Add<ColorWidget>().Ctor<string>("color").Is("Yellow").Named(
"Yellow");
For<IWidget>().Add<ColorWidget>().Ctor<string>("color").Is("Blue").Named(
"Blue");
}
}
// SAMPLE: simple-registry
public class PurpleRegistry : Registry
{
public PurpleRegistry()
{
For<IWidget>().Use<AWidget>();
}
}
// ENDSAMPLE
[Fact]
public void Can_add_an_instance_for_concrete_class_with_no_constructors()
{
var registry = new Registry();
registry.For<ConcreteWithNoConstructor>().Use(
c => ConcreteWithNoConstructor.Build());
var container = new Container(registry);
container.GetInstance<ConcreteWithNoConstructor>().ShouldNotBeNull();
}
[Fact]
public void an_instance_of_the_base_registry_is_equal_to_itself()
{
var registry1 = new Registry();
registry1.Equals((object)registry1).ShouldBeTrue();
}
[Fact]
public void two_instances_of_the_base_registry_type_are_not_considered_equal()
{
var registry1 = new Registry();
var registry2 = new Registry();
registry1.Equals((object)registry2).ShouldBeFalse();
}
[Fact]
public void two_instances_of_a_public_derived_registry_type_are_considered_equal()
{
var registry1 = new TestRegistry();
var registry2 = new TestRegistry();
var registry3 = new TestRegistry2();
var registry4 = new TestRegistry2();
registry1.Equals((object)registry1).ShouldBeTrue();
registry1.Equals((object)registry2).ShouldBeTrue();
registry2.Equals((object)registry1).ShouldBeTrue();
registry3.Equals((object)registry4).ShouldBeTrue();
registry1.Equals((object)registry3).ShouldBeFalse();
registry3.Equals((object)registry1).ShouldBeFalse();
}
[Fact]
public void two_instances_of_a_non_public_derived_registry_type_are_not_considered_equal()
{
var registry1 = new InternalTestRegistry();
var registry2 = new InternalTestRegistry();
registry1.Equals((object)registry1).ShouldBeTrue();
registry1.Equals((object)registry2).ShouldBeFalse();
}
// SAMPLE: including-registries
[Fact]
public void include_a_registry()
{
var registry = new Registry();
registry.IncludeRegistry<YellowBlueRegistry>();
registry.IncludeRegistry<RedGreenRegistry>();
registry.IncludeRegistry<PurpleRegistry>();
// build a container
var container = new Container(registry);
// verify the default implementation and total registered implementations
container.GetInstance<IWidget>().ShouldBeOfType<AWidget>();
container.GetAllInstances<IWidget>().Count().ShouldBe(5);
}
// ENDSAMPLE
public class MutatedWidget : IWidget
{
public void DoSomething()
{
}
}
public class MutatingRegistry : Registry
{
private static int count;
public MutatingRegistry()
{
For<IWidget>().Use<AWidget>();
if (count++ >= 1)
{
For<IWidget>().Use<MutatedWidget>();
}
}
}
[Fact]
public void Latch_on_a_PluginGraph()
{
var registry2 = new TestRegistry2();
var graph = PluginGraph.CreateRoot();
graph.ImportRegistry(registry2);
graph.QueuedRegistries.Count.ShouldBe(1);
graph.ImportRegistry(registry2);
graph.QueuedRegistries.Count.ShouldBe(1);
}
[Fact]
public void use_the_basic_actions_as_part_of_building_a_PluginGraph()
{
var container = new Container(new BasicActionRegistry());
container.GetInstance<IGateway>().ShouldBeOfType<Fake3Gateway>();
}
}
public class ConcreteWithNoConstructor
{
private ConcreteWithNoConstructor()
{
}
public static ConcreteWithNoConstructor Build()
{
return new ConcreteWithNoConstructor();
}
}
public class TestRegistry : Registry
{
}
public class TestRegistry2 : Registry
{
private readonly int _count;
public TestRegistry2()
{
_count++;
}
public int ExecutedCount
{
get { return _count; }
}
}
internal class InternalTestRegistry : Registry
{
}
public class FakeGateway : IGateway
{
#region IGateway Members
public void DoSomething()
{
throw new NotImplementedException();
}
public string WhoAmI
{
get { throw new NotImplementedException(); }
}
#endregion IGateway Members
}
public class Fake2Gateway : IGateway
{
#region IGateway Members
public void DoSomething()
{
throw new NotImplementedException();
}
public string WhoAmI
{
get { throw new NotImplementedException(); }
}
#endregion IGateway Members
}
public class Fake3Gateway : IGateway
{
#region IGateway Members
public void DoSomething()
{
throw new NotImplementedException();
}
public string WhoAmI
{
get { throw new NotImplementedException(); }
}
#endregion IGateway Members
}
public class BasicActionRegistry : Registry
{
public BasicActionRegistry()
{
For<IGateway>().Use<Fake3Gateway>();
}
}
}