Пример #1
0
        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);
        }
Пример #2
0
        //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));
        }