Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
**使用Nuget安装**

```PM
Install-Package CatLib.Core -Version 1.2.0
Install-Package CatLib.Core -Version 1.2.1
```

**直接下载发布版本**
Expand Down
182 changes: 162 additions & 20 deletions src/CatLib.Core.Tests/CatLib/FacaedTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,26 +34,6 @@ public class TestClassFacadeError : Facade<FacaedTestClass>

}

[TestMethod]
public void FacadeErrorTest()
{
var app = new Application();
app.Bootstrap();
app.Singleton<FacaedTestClass>();

var isError = false;
try
{
var data = TestClassFacadeError.Instance;
}
catch (TypeInitializationException)
{
isError = true;
}

Assert.AreEqual(true, isError);
}

[TestMethod]
public void FacadeWatchTest()
{
Expand Down Expand Up @@ -205,5 +185,167 @@ public void TestNotBind()
}
Assert.AreEqual(true, isError);
}

[TestMethod]
public void TestStructBindAndRebound()
{
var app = new Application();
Assert.AreEqual(0, Facade<int>.Instance);
Assert.AreEqual(0, Facade<int>.Instance); // double check
var makeCount = 0;
var binder = app.Bind<int>(() =>
{
makeCount++;
return 100;
});
Assert.AreEqual(100, Facade<int>.Instance);
Assert.AreEqual(100, Facade<int>.Instance); // double check
Assert.AreEqual(3, makeCount); // 这里为3是因为最开始的facade触发已经引发了解决事件
binder.Unbind();
Assert.AreEqual(0, Facade<int>.Instance);
Assert.AreEqual(0, Facade<int>.Instance); // double check
app.Bind<int>(() =>
{
makeCount++;
return 200;
});
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance); // double check
Assert.AreEqual(6, makeCount);
}

[TestMethod]
public void TestStructSingleAndRebound()
{
var app = new Application();
var makeCount = 0;
var binder = app.Singleton<int>(() =>
{
makeCount++;
return 100;
});
Assert.AreEqual(100, Facade<int>.Instance);
Assert.AreEqual(100, Facade<int>.Instance); // double check
Assert.AreEqual(1, makeCount);
app.Instance<int>(200);
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance); // double check
Assert.AreEqual(1, makeCount);
binder.Unbind();
Assert.AreEqual(0, Facade<int>.Instance);
Assert.AreEqual(0, Facade<int>.Instance); // double check
Assert.AreEqual(1, makeCount);
binder = app.Singleton<int>(() =>
{
makeCount++;
return 200;
});
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance); // double check
Assert.AreEqual(2, makeCount);

binder.Unbind(); // 三次连续测试来测试一个特殊情况
Assert.AreEqual(0, Facade<int>.Instance);
Assert.AreEqual(0, Facade<int>.Instance); // double check
Assert.AreEqual(2, makeCount);
binder = app.Singleton<int>(() =>
{
makeCount++;
return 300;
});
Assert.AreEqual(300, Facade<int>.Instance);
Assert.AreEqual(300, Facade<int>.Instance); // double check
Assert.AreEqual(3, makeCount);
app.Release<int>();
Assert.AreEqual(300, Facade<int>.Instance);
Assert.AreEqual(4, makeCount);
}

[TestMethod]
public void TestStructSingleToBindAndRebound()
{
var app = new Application();
var makeCount = 0;
var binder = app.Bind<int>(() =>
{
makeCount++;
return 100;
});
Assert.AreEqual(100, Facade<int>.Instance);
Assert.AreEqual(100, Facade<int>.Instance); // double check
Assert.AreEqual(2, makeCount);

binder.Unbind();
Assert.AreEqual(0, Facade<int>.Instance);

binder = app.Singleton<int>(() =>
{
makeCount++;
return 200;
});
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance); // double check
Assert.AreEqual(3, makeCount);
}

[TestMethod]
public void TestStructSingleRelease()
{
var app = new Application();
var makeCount = 0;
var binder = app.Singleton<int>(() =>
{
makeCount++;
return 100;
});
Assert.AreEqual(100, Facade<int>.Instance);
Assert.AreEqual(100, Facade<int>.Instance); // double check
Assert.AreEqual(1, makeCount);
app.Release<int>();
Assert.AreEqual(100, Facade<int>.Instance);
app.Instance<int>(200);
Assert.AreEqual(200, Facade<int>.Instance);
app.Release<int>();
app.Instance<int>(300);
Assert.AreEqual(300, Facade<int>.Instance);
}

[TestMethod]
public void TestStructBindToSingleRebound()
{
var app = new Application();
var makeCount = 0;
var binder = app.Bind<int>(() =>
{
makeCount++;
return 100;
});
Assert.AreEqual(100, Facade<int>.Instance);
Assert.AreEqual(100, Facade<int>.Instance); // double check
Assert.AreEqual(2, makeCount);

Assert.AreEqual(false, app.Release<int>());
binder.Unbind();
binder = app.Singleton<int>(() =>
{
makeCount++;
return 200;
});
Assert.AreEqual(3, makeCount);
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(3, makeCount);

Assert.AreEqual(true, app.Release<int>());
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(200, Facade<int>.Instance);
Assert.AreEqual(4, makeCount);

Assert.AreEqual(true, app.Release<int>());
app.Instance<int>(300);
Assert.AreEqual(300, Facade<int>.Instance);
Assert.AreEqual(300, Facade<int>.Instance);
Assert.AreEqual(4, makeCount);
}
}
}
4 changes: 2 additions & 2 deletions src/CatLib.Core.Tests/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@

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

[assembly: AssemblyVersion("1.2.0.0")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyVersion("1.2.1.0")]
[assembly: AssemblyFileVersion("1.2.1.0")]
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ public void TestBindIf()
Assert.AreEqual(true, App.BindIf<long>((c,p) => 100, out bindData));
Assert.AreEqual(true, App.BindIf<int>(() => 100, out bindData));
Assert.AreEqual(100, App.Make<int>());
Assert.AreEqual(100, App.Make<int>()); // double get check
Assert.AreEqual(true, App.BindIf<double, float>(out bindData));
Assert.AreEqual(false, App.BindIf<double, float>(out bindData));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,25 +120,25 @@ public void TestSingleMake()
[TestMethod]
public void TestBindMake()
{
var container = new Container();
var container = new Application();
container.Bind<TestMakeHandClass>((_, __) => new TestMakeHandClass(null));
container.Singleton<TestSerializeClass>();
container.Bind<TestMakeClass>().Alias<ITestMakeClass>();
container.Bind<TestMakeNullParamsClass>().Alias<ITestMakeNullParamsClass>();

Watch("TestBindMake(非反射) 1000000次", () =>
{
container.Make<TestMakeHandClass>();
App.Make<TestMakeHandClass>();
}, 1000000);

Watch("TestBindMake(反射,依赖注入) 1000000次", () =>
{
container.Make<ITestMakeClass>();
App.Make<ITestMakeClass>();
}, 1000000);

Watch("TestBindMake(反射,无注入) 1000000次", () =>
{
container.Make<ITestMakeNullParamsClass>();
App.Make<ITestMakeNullParamsClass>();
}, 1000000);
}

Expand Down
14 changes: 7 additions & 7 deletions src/CatLib.Core/CatLib/App.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace CatLib
/// CatLib实例
/// </summary>
[ExcludeFromCodeCoverage]
public class App
public abstract class App
{
#region Original
/// <summary>
Expand Down Expand Up @@ -521,9 +521,9 @@ public static object Instance(string service, object instance)
/// 释放某个静态化实例
/// </summary>
/// <param name="service">服务名或别名</param>
public static void Release(string service)
public static bool Release(string service)
{
Handler.Release(service);
return Handler.Release(service);
}

/// <summary>
Expand Down Expand Up @@ -1018,9 +1018,9 @@ public static void Instance<TService>(object instance)
/// 释放服务
/// </summary>
/// <typeparam name="TService">服务名</typeparam>
public static void Release<TService>()
public static bool Release<TService>()
{
Handler.Release<TService>();
return Handler.Release<TService>();
}

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

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

/// <summary>
Expand Down
2 changes: 1 addition & 1 deletion src/CatLib.Core/CatLib/Application.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class Application : Container, IApplication
/// <summary>
/// 版本号
/// </summary>
private readonly Version version = new Version("1.2.0");
private readonly Version version = new Version("1.2.1");

/// <summary>
/// 框架启动流程
Expand Down
Loading