Skip to content

Commit 7f54674

Browse files
author
喵喵大人
authored
Merge pull request #22 from CatLib/1.2
1.2.5 Version
2 parents adf7e03 + 82fdb57 commit 7f54674

File tree

10 files changed

+116
-36
lines changed

10 files changed

+116
-36
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.4
31+
Install-Package CatLib.Core -Version 1.2.5
3232
```
3333

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

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.4.0")]
29-
[assembly: AssemblyFileVersion("1.2.4.0")]
28+
[assembly: AssemblyVersion("1.2.5.0")]
29+
[assembly: AssemblyFileVersion("1.2.5.0")]

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,54 @@ public void TestNullFromParams()
21112111
});
21122112
}
21132113

2114+
class CallInjectClass
2115+
{
2116+
public string Value { get; set; }
2117+
}
2118+
2119+
[TestMethod]
2120+
public void TestCallInject()
2121+
{
2122+
var container = new Container();
2123+
var isCall = false;
2124+
container.Call((CallInjectClass cls) =>
2125+
{
2126+
Assert.AreEqual("100", cls.Value);
2127+
isCall = true;
2128+
}, new CallInjectClass { Value = "100"});
2129+
Assert.AreEqual(true, isCall);
2130+
}
2131+
2132+
class CallInjectClassCurrent : IParams
2133+
{
2134+
public string Value { get; set; }
2135+
2136+
/// <summary>
2137+
/// 获取一个参数
2138+
/// </summary>
2139+
/// <param name="key">参数名</param>
2140+
/// <param name="value">参数值</param>
2141+
/// <returns>是否成功获取</returns>
2142+
public bool TryGetValue(string key, out object value)
2143+
{
2144+
value = null;
2145+
return false;
2146+
}
2147+
}
2148+
2149+
[TestMethod]
2150+
public void TestCallInjectCurrent()
2151+
{
2152+
var container = new Container();
2153+
var isCall = false;
2154+
container.Call((CallInjectClassCurrent cls) =>
2155+
{
2156+
Assert.AreEqual("100", cls.Value);
2157+
isCall = true;
2158+
}, new CallInjectClassCurrent { Value = "100" });
2159+
Assert.AreEqual(true, isCall);
2160+
}
2161+
21142162
/// <summary>
21152163
/// 测试基础容器调用
21162164
/// </summary>

src/CatLib.Core.Tests/Support/Dispatcher/DispatcherTests.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public void TestHaltNull()
219219
return 1;
220220
});
221221

222-
dispatcher.Listen("event.time", (object payload) =>
222+
dispatcher.Listen<object, object>("event.time", (payload) =>
223223
{
224224
Assert.AreEqual(123, payload);
225225
return null;
@@ -263,12 +263,12 @@ public void TestAllHaltNull()
263263
var app = MakeEnv();
264264

265265
var dispatcher = app.Make<IDispatcher>();
266-
dispatcher.Listen("event.time", (object payload) =>
266+
dispatcher.Listen<object, object>("event.time", (payload) =>
267267
{
268268
return null;
269269
});
270270

271-
dispatcher.Listen("event.time", (object payload) =>
271+
dispatcher.Listen<object, object>("event.time", (payload) =>
272272
{
273273
return null;
274274
});
@@ -364,6 +364,21 @@ public void TestHasListeners()
364364
Assert.AreEqual(true, isCall);
365365
}
366366

367+
public static int StaticCall()
368+
{
369+
return 100;
370+
}
371+
372+
[TestMethod]
373+
public void TestStatic()
374+
{
375+
var app = MakeEnv();
376+
var dispatcher = app.Make<IDispatcher>();
377+
378+
App.Listen("ActionTest", StaticCall);
379+
Assert.AreEqual(100, App.TriggerHalt("ActionTest"));
380+
}
381+
367382
[TestMethod]
368383
public void TestActionFuncCover()
369384
{

src/CatLib.Core/CatLib/App.cs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public static IEvent On<T1, T2, T3, T4>(string eventName, Action<T1, T2, T3, T4>
275275
/// <param name="eventName">事件名称</param>
276276
/// <param name="method">事件处理方法</param>
277277
/// <returns>事件对象</returns>
278-
public static IEvent Listen(string eventName, Func<object> method)
278+
public static IEvent Listen<TResult>(string eventName, Func<TResult> method)
279279
{
280280
return Handler.Listen(eventName, method);
281281
}
@@ -286,7 +286,7 @@ public static IEvent Listen(string eventName, Func<object> method)
286286
/// <param name="eventName">事件名称</param>
287287
/// <param name="method">事件处理方法</param>
288288
/// <returns>事件对象</returns>
289-
public static IEvent Listen<T1>(string eventName, Func<T1, object> method)
289+
public static IEvent Listen<T1, TResult>(string eventName, Func<T1, TResult> method)
290290
{
291291
return Handler.Listen(eventName, method);
292292
}
@@ -297,7 +297,7 @@ public static IEvent Listen<T1>(string eventName, Func<T1, object> method)
297297
/// <param name="eventName">事件名称</param>
298298
/// <param name="method">事件处理方法</param>
299299
/// <returns>事件对象</returns>
300-
public static IEvent Listen<T1, T2>(string eventName, Func<T1, T2, object> method)
300+
public static IEvent Listen<T1, T2, TResult>(string eventName, Func<T1, T2, TResult> method)
301301
{
302302
return Handler.Listen(eventName, method);
303303
}
@@ -308,7 +308,7 @@ public static IEvent Listen<T1, T2>(string eventName, Func<T1, T2, object> metho
308308
/// <param name="eventName">事件名称</param>
309309
/// <param name="method">事件处理方法</param>
310310
/// <returns>事件对象</returns>
311-
public static IEvent Listen<T1, T2, T3>(string eventName, Func<T1, T2, T3, object> method)
311+
public static IEvent Listen<T1, T2, T3, TResult>(string eventName, Func<T1, T2, T3, TResult> method)
312312
{
313313
return Handler.Listen(eventName, method);
314314
}
@@ -319,7 +319,7 @@ public static IEvent Listen<T1, T2, T3>(string eventName, Func<T1, T2, T3, objec
319319
/// <param name="eventName">事件名称</param>
320320
/// <param name="method">事件处理方法</param>
321321
/// <returns>事件对象</returns>
322-
public static IEvent Listen<T1, T2, T3, T4>(string eventName, Func<T1, T2, T3, T4, object> method)
322+
public static IEvent Listen<T1, T2, T3, T4, TResult>(string eventName, Func<T1, T2, T3, T4, TResult> method)
323323
{
324324
return Handler.Listen(eventName, method);
325325
}
@@ -1071,36 +1071,40 @@ public static object Call(object instance, string method, params object[] userPa
10711071
/// 以依赖注入的形式调用一个方法
10721072
/// </summary>
10731073
/// <param name="method">方法</param>
1074-
public static void Call<T1>(Action<T1> method)
1074+
/// <param name="userParams">用户传入的参数</param>
1075+
public static void Call<T1>(Action<T1> method, params object[] userParams)
10751076
{
1076-
Handler.Call(method);
1077+
Handler.Call(method, userParams);
10771078
}
10781079

10791080
/// <summary>
10801081
/// 以依赖注入的形式调用一个方法
10811082
/// </summary>
10821083
/// <param name="method">方法</param>
1083-
public static void Call<T1, T2>(Action<T1, T2> method)
1084+
/// <param name="userParams">用户传入的参数</param>
1085+
public static void Call<T1, T2>(Action<T1, T2> method, params object[] userParams)
10841086
{
1085-
Handler.Call(method);
1087+
Handler.Call(method, userParams);
10861088
}
10871089

10881090
/// <summary>
10891091
/// 以依赖注入的形式调用一个方法
10901092
/// </summary>
10911093
/// <param name="method">方法</param>
1092-
public static void Call<T1, T2, T3>(Action<T1, T2, T3> method)
1094+
/// <param name="userParams">用户传入的参数</param>
1095+
public static void Call<T1, T2, T3>(Action<T1, T2, T3> method, params object[] userParams)
10931096
{
1094-
Handler.Call(method);
1097+
Handler.Call(method, userParams);
10951098
}
10961099

10971100
/// <summary>
10981101
/// 以依赖注入的形式调用一个方法
10991102
/// </summary>
11001103
/// <param name="method">方法</param>
1101-
public static void Call<T1, T2, T3, T4>(Action<T1, T2, T3, T4> method)
1104+
/// <param name="userParams">用户传入的参数</param>
1105+
public static void Call<T1, T2, T3, T4>(Action<T1, T2, T3, T4> method, params object[] userParams)
11021106
{
1103-
Handler.Call(method);
1107+
Handler.Call(method, userParams);
11041108
}
11051109

11061110
/// <summary>

src/CatLib.Core/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626

2727
[assembly: Guid("4204658e-81fd-4106-a347-890cd369c8a4")]
2828

29-
[assembly: AssemblyVersion("1.2.4.0")]
30-
[assembly: AssemblyFileVersion("1.2.4.0")]
29+
[assembly: AssemblyVersion("1.2.5.0")]
30+
[assembly: AssemblyFileVersion("1.2.5.0")]
3131

3232
[assembly: InternalsVisibleTo("Assembly-CSharp-Editor"),
3333
InternalsVisibleTo("Assembly-CSharp-Editor-firstpass"),

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1739,7 +1739,8 @@ private BindData GetBindFillable(string service)
17391739
/// <returns>获取到的参数</returns>
17401740
private IParams[] GetParamsTypeInUserParams(ref object[] userParams)
17411741
{
1742-
var elements = Arr.Remove(ref userParams, value => value is IParams);
1742+
// 这里使用了Filter而没有使用Remove由于筛选器也是可能希望注入的类型之一
1743+
var elements = Arr.Filter(userParams, value => value is IParams);
17431744
var results = new IParams[elements.Length];
17441745
for (var i = 0; i < elements.Length; i++)
17451746
{

src/CatLib.Core/Support/Container/ContainerExtend.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -523,43 +523,47 @@ public static bool Release(this IContainer container, params object[] instances)
523523
/// </summary>
524524
/// <param name="container">服务容器</param>
525525
/// <param name="method">方法</param>
526-
public static void Call<T1>(this IContainer container, Action<T1> method)
526+
/// <param name="userParams">用户参数</param>
527+
public static void Call<T1>(this IContainer container, Action<T1> method, params object[] userParams)
527528
{
528529
Guard.Requires<ArgumentNullException>(method != null);
529-
container.Call(method.Target, method.Method);
530+
container.Call(method.Target, method.Method, userParams);
530531
}
531532

532533
/// <summary>
533534
/// 以依赖注入的形式调用一个方法
534535
/// </summary>
535536
/// <param name="container">服务容器</param>
536537
/// <param name="method">方法</param>
537-
public static void Call<T1, T2>(this IContainer container, Action<T1, T2> method)
538+
/// <param name="userParams">用户参数</param>
539+
public static void Call<T1, T2>(this IContainer container, Action<T1, T2> method, params object[] userParams)
538540
{
539541
Guard.Requires<ArgumentNullException>(method != null);
540-
container.Call(method.Target, method.Method);
542+
container.Call(method.Target, method.Method, userParams);
541543
}
542544

543545
/// <summary>
544546
/// 以依赖注入的形式调用一个方法
545547
/// </summary>
546548
/// <param name="container">服务容器</param>
547549
/// <param name="method">方法</param>
548-
public static void Call<T1, T2, T3>(this IContainer container, Action<T1, T2, T3> method)
550+
/// <param name="userParams">用户参数</param>
551+
public static void Call<T1, T2, T3>(this IContainer container, Action<T1, T2, T3> method, params object[] userParams)
549552
{
550553
Guard.Requires<ArgumentNullException>(method != null);
551-
container.Call(method.Target, method.Method);
554+
container.Call(method.Target, method.Method, userParams);
552555
}
553556

554557
/// <summary>
555558
/// 以依赖注入的形式调用一个方法
556559
/// </summary>
557560
/// <param name="container">服务容器</param>
558561
/// <param name="method">方法</param>
559-
public static void Call<T1, T2, T3, T4>(this IContainer container, Action<T1, T2, T3, T4> method)
562+
/// <param name="userParams">用户参数</param>
563+
public static void Call<T1, T2, T3, T4>(this IContainer container, Action<T1, T2, T3, T4> method, params object[] userParams)
560564
{
561565
Guard.Requires<ArgumentNullException>(method != null);
562-
container.Call(method.Target, method.Method);
566+
container.Call(method.Target, method.Method, userParams);
563567
}
564568

565569
/// <summary>

src/CatLib.Core/Support/Events/Dispatcher.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,11 @@ public object TriggerHalt(string eventName, params object[] payloads)
146146
public IEvent On(string eventName, object target, MethodInfo method)
147147
{
148148
Guard.NotEmptyOrNull(eventName, "eventName");
149-
Guard.Requires<ArgumentNullException>(target != null);
150149
Guard.Requires<ArgumentNullException>(method != null);
150+
if (!method.IsStatic)
151+
{
152+
Guard.Requires<ArgumentNullException>(target != null);
153+
}
151154

152155
lock (syncRoot)
153156
{
@@ -157,6 +160,11 @@ public IEvent On(string eventName, object target, MethodInfo method)
157160
? SetupWildcardListen(eventName, target, method)
158161
: SetupListen(eventName, target, method);
159162

163+
if (target == null)
164+
{
165+
return result;
166+
}
167+
160168
List<IEvent> listener;
161169
if (!targetMapping.TryGetValue(target, out listener))
162170
{

src/CatLib.Core/Support/Events/DispatcherExtend.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static IEvent On<T1, T2, T3, T4>(this IDispatcher dispatcher, string even
107107
/// <param name="eventName">事件名称</param>
108108
/// <param name="method">事件处理方法</param>
109109
/// <returns>事件对象</returns>
110-
public static IEvent Listen(this IDispatcher dispatcher, string eventName, Func<object> method)
110+
public static IEvent Listen<TResult>(this IDispatcher dispatcher, string eventName, Func<TResult> method)
111111
{
112112
Guard.Requires<ArgumentNullException>(method != null);
113113
return dispatcher.On(eventName, method.Target, method.Method);
@@ -120,7 +120,7 @@ public static IEvent Listen(this IDispatcher dispatcher, string eventName, Func<
120120
/// <param name="eventName">事件名称</param>
121121
/// <param name="method">事件处理方法</param>
122122
/// <returns>事件对象</returns>
123-
public static IEvent Listen<T1>(this IDispatcher dispatcher, string eventName, Func<T1, object> method)
123+
public static IEvent Listen<T1, TResult>(this IDispatcher dispatcher, string eventName, Func<T1, TResult> method)
124124
{
125125
Guard.Requires<ArgumentNullException>(method != null);
126126
return dispatcher.On(eventName, method.Target, method.Method);
@@ -133,7 +133,7 @@ public static IEvent Listen<T1>(this IDispatcher dispatcher, string eventName, F
133133
/// <param name="eventName">事件名称</param>
134134
/// <param name="method">事件处理方法</param>
135135
/// <returns>事件对象</returns>
136-
public static IEvent Listen<T1, T2>(this IDispatcher dispatcher, string eventName, Func<T1, T2, object> method)
136+
public static IEvent Listen<T1, T2, TResult>(this IDispatcher dispatcher, string eventName, Func<T1, T2, TResult> method)
137137
{
138138
Guard.Requires<ArgumentNullException>(method != null);
139139
return dispatcher.On(eventName, method.Target, method.Method);
@@ -146,7 +146,7 @@ public static IEvent Listen<T1, T2>(this IDispatcher dispatcher, string eventNam
146146
/// <param name="eventName">事件名称</param>
147147
/// <param name="method">事件处理方法</param>
148148
/// <returns>事件对象</returns>
149-
public static IEvent Listen<T1, T2, T3>(this IDispatcher dispatcher, string eventName, Func<T1, T2, T3, object> method)
149+
public static IEvent Listen<T1, T2, T3, TResult>(this IDispatcher dispatcher, string eventName, Func<T1, T2, T3, TResult> method)
150150
{
151151
Guard.Requires<ArgumentNullException>(method != null);
152152
return dispatcher.On(eventName, method.Target, method.Method);
@@ -159,7 +159,7 @@ public static IEvent Listen<T1, T2, T3>(this IDispatcher dispatcher, string even
159159
/// <param name="eventName">事件名称</param>
160160
/// <param name="method">事件处理方法</param>
161161
/// <returns>事件对象</returns>
162-
public static IEvent Listen<T1, T2, T3, T4>(this IDispatcher dispatcher, string eventName, Func<T1, T2, T3, T4, object> method)
162+
public static IEvent Listen<T1, T2, T3, T4, TResult>(this IDispatcher dispatcher, string eventName, Func<T1, T2, T3, T4, TResult> method)
163163
{
164164
Guard.Requires<ArgumentNullException>(method != null);
165165
return dispatcher.On(eventName, method.Target, method.Method);

0 commit comments

Comments
 (0)