public static string GetMethodString(Type[] parameterTypes, Type returnType, Func <Type, string> nameResolver) { var argumentHash = TypeHasher.GetTypeName(false, nameResolver, parameterTypes); argumentHash = $"{argumentHash}:{TypeHasher.GetTypeName(true, nameResolver, returnType)}"; return(argumentHash); }
//public static async Task<T> HandleAsync<T>(this IHandlerProvider handlerProvider, IResolverSession session, // string scopeId, string actionId, object[] requests, CancellationToken cancellationToken) //{ // var actionBytes = new byte[4]; // actionBytes.AddBytes<int>(actionId, 4, 0); // return await HandleAsync<T>(handlerProvider, session, scopeId, actionBytes, requests, cancellationToken); //} public static async Task <T> HandleAsync <T>(this IHandlerProvider handlerProvider, IResolverSession session, string scopeId, string actionId, object[] requests, CancellationToken cancellationToken) { var parameterTypes = requests.Where(r => !(r is CancellationToken)).Select(r => r.GetType()).ToArray(); var returnType = typeof(T); var parameterHash = TypeHasher.GetMethodBytes(parameterTypes, returnType, t => t.Name); //var scopeBytes = Encoding.UTF8.GetBytes(scopeId); var actionHash = TypeHasher.CreateMD5Hash(Encoding.UTF8.GetBytes($"scope-{scopeId}:action-{actionId}"), parameterHash); var handler = handlerProvider.GetHandler(actionHash.ToByteArray()); return((T)await handler.HandleAsync(session, requests, cancellationToken)); }