Skip to content

Commit 6727460

Browse files
authored
Merge pull request #730 from iceljc/master
refine sidecar
2 parents 3b492a1 + 64b51a3 commit 6727460

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/Infrastructure/BotSharp.Abstraction/SideCar/Attributes/SideCarAspect.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,22 @@ private static MethodInfo GetMethod(string name)
4040
return typeof(SideCarAspect).GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
4141
}
4242

43-
private object CallAsyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
43+
44+
private (IConversationSideCar?, MethodInfo?) GetSideCarMethod(IServiceProvider serviceProvider, string methodName, object[] args)
4445
{
4546
var sidecar = serviceProvider.GetService<IConversationSideCar>();
46-
var sidecarMethod = sidecar?.GetType()?.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
47+
var paramTypes = args.Select(x => x.GetType()).ToList();
48+
var sidecarMethod = sidecar?.GetType()?.GetMethods(BindingFlags.Public | BindingFlags.Instance)
49+
.FirstOrDefault(x => x.Name == methodName && x.GetParameters().Select(p => p.ParameterType).SequenceEqual(paramTypes));
50+
51+
return (sidecar, sidecarMethod);
52+
}
4753

54+
private object CallAsyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
55+
{
4856
object value;
57+
58+
var (sidecar, sidecarMethod) = GetSideCarMethod(serviceProvider, methodName, args);
4959
var enabled = sidecar != null && sidecar.IsEnabled() && sidecarMethod != null;
5060

5161
if (retType == typeof(void))
@@ -77,11 +87,10 @@ private object CallAsyncMethod(IServiceProvider serviceProvider, Type retType, s
7787

7888
private object CallSyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
7989
{
80-
var sidecar = serviceProvider.GetService<IConversationSideCar>();
81-
var sidecarMethod = sidecar?.GetType()?.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
82-
8390
object value;
84-
var enabled = sidecar != null && sidecarMethod != null && sidecar.IsEnabled();
91+
92+
var (sidecar, sidecarMethod) = GetSideCarMethod(serviceProvider, methodName, args);
93+
var enabled = sidecar != null && sidecar.IsEnabled() && sidecarMethod != null;
8594

8695
if (retType == typeof(void))
8796
{

0 commit comments

Comments
 (0)