Skip to content

Commit bf94c4d

Browse files
author
喵喵大人
authored
Merge pull request #17 from CatLib/1.2
1.2.1 Version
2 parents 3874a17 + 29cf824 commit bf94c4d

File tree

12 files changed

+272
-76
lines changed

12 files changed

+272
-76
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
**使用Nuget安装**
2929

3030
```PM
31-
Install-Package CatLib.Core -Version 1.2.0
31+
Install-Package CatLib.Core -Version 1.2.1
3232
```
3333

3434
**直接下载发布版本**

src/CatLib.Core.Tests/CatLib/FacaedTests.cs

Lines changed: 162 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,6 @@ public class TestClassFacadeError : Facade<FacaedTestClass>
3434

3535
}
3636

37-
[TestMethod]
38-
public void FacadeErrorTest()
39-
{
40-
var app = new Application();
41-
app.Bootstrap();
42-
app.Singleton<FacaedTestClass>();
43-
44-
var isError = false;
45-
try
46-
{
47-
var data = TestClassFacadeError.Instance;
48-
}
49-
catch (TypeInitializationException)
50-
{
51-
isError = true;
52-
}
53-
54-
Assert.AreEqual(true, isError);
55-
}
56-
5737
[TestMethod]
5838
public void FacadeWatchTest()
5939
{
@@ -205,5 +185,167 @@ public void TestNotBind()
205185
}
206186
Assert.AreEqual(true, isError);
207187
}
188+
189+
[TestMethod]
190+
public void TestStructBindAndRebound()
191+
{
192+
var app = new Application();
193+
Assert.AreEqual(0, Facade<int>.Instance);
194+
Assert.AreEqual(0, Facade<int>.Instance); // double check
195+
var makeCount = 0;
196+
var binder = app.Bind<int>(() =>
197+
{
198+
makeCount++;
199+
return 100;
200+
});
201+
Assert.AreEqual(100, Facade<int>.Instance);
202+
Assert.AreEqual(100, Facade<int>.Instance); // double check
203+
Assert.AreEqual(3, makeCount); // 这里为3是因为最开始的facade触发已经引发了解决事件
204+
binder.Unbind();
205+
Assert.AreEqual(0, Facade<int>.Instance);
206+
Assert.AreEqual(0, Facade<int>.Instance); // double check
207+
app.Bind<int>(() =>
208+
{
209+
makeCount++;
210+
return 200;
211+
});
212+
Assert.AreEqual(200, Facade<int>.Instance);
213+
Assert.AreEqual(200, Facade<int>.Instance); // double check
214+
Assert.AreEqual(6, makeCount);
215+
}
216+
217+
[TestMethod]
218+
public void TestStructSingleAndRebound()
219+
{
220+
var app = new Application();
221+
var makeCount = 0;
222+
var binder = app.Singleton<int>(() =>
223+
{
224+
makeCount++;
225+
return 100;
226+
});
227+
Assert.AreEqual(100, Facade<int>.Instance);
228+
Assert.AreEqual(100, Facade<int>.Instance); // double check
229+
Assert.AreEqual(1, makeCount);
230+
app.Instance<int>(200);
231+
Assert.AreEqual(200, Facade<int>.Instance);
232+
Assert.AreEqual(200, Facade<int>.Instance); // double check
233+
Assert.AreEqual(1, makeCount);
234+
binder.Unbind();
235+
Assert.AreEqual(0, Facade<int>.Instance);
236+
Assert.AreEqual(0, Facade<int>.Instance); // double check
237+
Assert.AreEqual(1, makeCount);
238+
binder = app.Singleton<int>(() =>
239+
{
240+
makeCount++;
241+
return 200;
242+
});
243+
Assert.AreEqual(200, Facade<int>.Instance);
244+
Assert.AreEqual(200, Facade<int>.Instance); // double check
245+
Assert.AreEqual(2, makeCount);
246+
247+
binder.Unbind(); // 三次连续测试来测试一个特殊情况
248+
Assert.AreEqual(0, Facade<int>.Instance);
249+
Assert.AreEqual(0, Facade<int>.Instance); // double check
250+
Assert.AreEqual(2, makeCount);
251+
binder = app.Singleton<int>(() =>
252+
{
253+
makeCount++;
254+
return 300;
255+
});
256+
Assert.AreEqual(300, Facade<int>.Instance);
257+
Assert.AreEqual(300, Facade<int>.Instance); // double check
258+
Assert.AreEqual(3, makeCount);
259+
app.Release<int>();
260+
Assert.AreEqual(300, Facade<int>.Instance);
261+
Assert.AreEqual(4, makeCount);
262+
}
263+
264+
[TestMethod]
265+
public void TestStructSingleToBindAndRebound()
266+
{
267+
var app = new Application();
268+
var makeCount = 0;
269+
var binder = app.Bind<int>(() =>
270+
{
271+
makeCount++;
272+
return 100;
273+
});
274+
Assert.AreEqual(100, Facade<int>.Instance);
275+
Assert.AreEqual(100, Facade<int>.Instance); // double check
276+
Assert.AreEqual(2, makeCount);
277+
278+
binder.Unbind();
279+
Assert.AreEqual(0, Facade<int>.Instance);
280+
281+
binder = app.Singleton<int>(() =>
282+
{
283+
makeCount++;
284+
return 200;
285+
});
286+
Assert.AreEqual(200, Facade<int>.Instance);
287+
Assert.AreEqual(200, Facade<int>.Instance); // double check
288+
Assert.AreEqual(3, makeCount);
289+
}
290+
291+
[TestMethod]
292+
public void TestStructSingleRelease()
293+
{
294+
var app = new Application();
295+
var makeCount = 0;
296+
var binder = app.Singleton<int>(() =>
297+
{
298+
makeCount++;
299+
return 100;
300+
});
301+
Assert.AreEqual(100, Facade<int>.Instance);
302+
Assert.AreEqual(100, Facade<int>.Instance); // double check
303+
Assert.AreEqual(1, makeCount);
304+
app.Release<int>();
305+
Assert.AreEqual(100, Facade<int>.Instance);
306+
app.Instance<int>(200);
307+
Assert.AreEqual(200, Facade<int>.Instance);
308+
app.Release<int>();
309+
app.Instance<int>(300);
310+
Assert.AreEqual(300, Facade<int>.Instance);
311+
}
312+
313+
[TestMethod]
314+
public void TestStructBindToSingleRebound()
315+
{
316+
var app = new Application();
317+
var makeCount = 0;
318+
var binder = app.Bind<int>(() =>
319+
{
320+
makeCount++;
321+
return 100;
322+
});
323+
Assert.AreEqual(100, Facade<int>.Instance);
324+
Assert.AreEqual(100, Facade<int>.Instance); // double check
325+
Assert.AreEqual(2, makeCount);
326+
327+
Assert.AreEqual(false, app.Release<int>());
328+
binder.Unbind();
329+
binder = app.Singleton<int>(() =>
330+
{
331+
makeCount++;
332+
return 200;
333+
});
334+
Assert.AreEqual(3, makeCount);
335+
Assert.AreEqual(200, Facade<int>.Instance);
336+
Assert.AreEqual(200, Facade<int>.Instance);
337+
Assert.AreEqual(3, makeCount);
338+
339+
Assert.AreEqual(true, app.Release<int>());
340+
Assert.AreEqual(200, Facade<int>.Instance);
341+
Assert.AreEqual(200, Facade<int>.Instance);
342+
Assert.AreEqual(4, makeCount);
343+
344+
Assert.AreEqual(true, app.Release<int>());
345+
app.Instance<int>(300);
346+
Assert.AreEqual(300, Facade<int>.Instance);
347+
Assert.AreEqual(300, Facade<int>.Instance);
348+
Assert.AreEqual(4, makeCount);
349+
}
208350
}
209351
}

src/CatLib.Core.Tests/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@
2525

2626
[assembly: Guid("3c9f4024-910c-4881-a04d-34a6c3a09019")]
2727

28-
[assembly: AssemblyVersion("1.2.0.0")]
29-
[assembly: AssemblyFileVersion("1.2.0.0")]
28+
[assembly: AssemblyVersion("1.2.1.0")]
29+
[assembly: AssemblyFileVersion("1.2.1.0")]

src/CatLib.Core.Tests/Support/Container/ContainerHelperTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public void TestBindIf()
145145
Assert.AreEqual(true, App.BindIf<long>((c,p) => 100, out bindData));
146146
Assert.AreEqual(true, App.BindIf<int>(() => 100, out bindData));
147147
Assert.AreEqual(100, App.Make<int>());
148+
Assert.AreEqual(100, App.Make<int>()); // double get check
148149
Assert.AreEqual(true, App.BindIf<double, float>(out bindData));
149150
Assert.AreEqual(false, App.BindIf<double, float>(out bindData));
150151

src/CatLib.Core.Tests/Support/Container/ContainerPerformanceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,25 +120,25 @@ public void TestSingleMake()
120120
[TestMethod]
121121
public void TestBindMake()
122122
{
123-
var container = new Container();
123+
var container = new Application();
124124
container.Bind<TestMakeHandClass>((_, __) => new TestMakeHandClass(null));
125125
container.Singleton<TestSerializeClass>();
126126
container.Bind<TestMakeClass>().Alias<ITestMakeClass>();
127127
container.Bind<TestMakeNullParamsClass>().Alias<ITestMakeNullParamsClass>();
128128

129129
Watch("TestBindMake(非反射) 1000000次", () =>
130130
{
131-
container.Make<TestMakeHandClass>();
131+
App.Make<TestMakeHandClass>();
132132
}, 1000000);
133133

134134
Watch("TestBindMake(反射,依赖注入) 1000000次", () =>
135135
{
136-
container.Make<ITestMakeClass>();
136+
App.Make<ITestMakeClass>();
137137
}, 1000000);
138138

139139
Watch("TestBindMake(反射,无注入) 1000000次", () =>
140140
{
141-
container.Make<ITestMakeNullParamsClass>();
141+
App.Make<ITestMakeNullParamsClass>();
142142
}, 1000000);
143143
}
144144

src/CatLib.Core/CatLib/App.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace CatLib
1919
/// CatLib实例
2020
/// </summary>
2121
[ExcludeFromCodeCoverage]
22-
public class App
22+
public abstract class App
2323
{
2424
#region Original
2525
/// <summary>
@@ -521,9 +521,9 @@ public static object Instance(string service, object instance)
521521
/// 释放某个静态化实例
522522
/// </summary>
523523
/// <param name="service">服务名或别名</param>
524-
public static void Release(string service)
524+
public static bool Release(string service)
525525
{
526-
Handler.Release(service);
526+
return Handler.Release(service);
527527
}
528528

529529
/// <summary>
@@ -1018,9 +1018,9 @@ public static void Instance<TService>(object instance)
10181018
/// 释放服务
10191019
/// </summary>
10201020
/// <typeparam name="TService">服务名</typeparam>
1021-
public static void Release<TService>()
1021+
public static bool Release<TService>()
10221022
{
1023-
Handler.Release<TService>();
1023+
return Handler.Release<TService>();
10241024
}
10251025

10261026
/// <summary>
@@ -1123,7 +1123,7 @@ public static Action Wrap<T1, T2, T3, T4>(Action<T1, T2, T3, T4> method, params
11231123
/// <returns>服务实例</returns>
11241124
public static TService Make<TService>(params object[] userParams)
11251125
{
1126-
return Handler.Make<TService>(userParams);
1126+
return Facade<TService>.Make(userParams);
11271127
}
11281128

11291129
/// <summary>
@@ -1144,7 +1144,7 @@ public static object Make(Type type, params object[] userParams)
11441144
/// <returns>回调方案</returns>
11451145
public static Func<TService> Factory<TService>(params object[] userParams)
11461146
{
1147-
return Handler.Factory<TService>(userParams);
1147+
return () => Make<TService>(userParams);
11481148
}
11491149

11501150
/// <summary>

src/CatLib.Core/CatLib/Application.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class Application : Container, IApplication
2424
/// <summary>
2525
/// 版本号
2626
/// </summary>
27-
private readonly Version version = new Version("1.2.0");
27+
private readonly Version version = new Version("1.2.1");
2828

2929
/// <summary>
3030
/// 框架启动流程

0 commit comments

Comments
 (0)