Skip to content

Commit 82fdb57

Browse files
committed
event bug fixed
1 parent 9eb9d21 commit 82fdb57

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

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: 5 additions & 5 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
}

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)