prevent disposed service provider

This commit is contained in:
Jicheng Lu 2025-06-18 20:55:23 -05:00
parent 3458e9f70f
commit 8d33c3619c

View file

@ -54,16 +54,23 @@ public class SideCarAttribute : AsyncMoAttribute
private (IConversationSideCar?, MethodInfo?) GetSideCarMethod(IServiceProvider serviceProvider, string methodName, Type retType, object[] args) private (IConversationSideCar?, MethodInfo?) GetSideCarMethod(IServiceProvider serviceProvider, string methodName, Type retType, object[] args)
{ {
var sidecar = serviceProvider.GetService<IConversationSideCar>(); try
var argTypes = args.Select(x => x.GetType()).ToArray(); {
var sidecarMethod = sidecar?.GetType()?.GetMethods(BindingFlags.Public | BindingFlags.Instance) var sidecar = serviceProvider.GetService<IConversationSideCar>();
.FirstOrDefault(x => x.Name == methodName var argTypes = args.Select(x => x.GetType()).ToArray();
&& x.ReturnType == retType var sidecarMethod = sidecar?.GetType()?.GetMethods(BindingFlags.Public | BindingFlags.Instance)
&& x.GetParameters().Length == argTypes.Length .FirstOrDefault(x => x.Name == methodName
&& x.GetParameters().Select(p => p.ParameterType) && x.ReturnType == retType
.Zip(argTypes, (paramType, argType) => paramType.IsAssignableFrom(argType)).All(y => y)); && x.GetParameters().Length == argTypes.Length
&& x.GetParameters().Select(p => p.ParameterType)
.Zip(argTypes, (paramType, argType) => paramType.IsAssignableFrom(argType)).All(y => y));
return (sidecar, sidecarMethod); return (sidecar, sidecarMethod);
}
catch
{
return (null, null);
}
} }
private async Task<(bool, object?)> CallAsyncMethod(IConversationSideCar instance, MethodInfo method, Type retType, object[] args) private async Task<(bool, object?)> CallAsyncMethod(IConversationSideCar instance, MethodInfo method, Type retType, object[] args)