FreeRedis icon indicating copy to clipboard operation
FreeRedis copied to clipboard

IRedisClient add async method

Open tky753 opened this issue 2 years ago • 3 comments

IRedisClient doesn't have async methods witch are implemnted in RedisClient, it makes IRedisClient a little 鸡肋.

tky753 avatar May 31 '23 01:05 tky753

IRedisClient 是社区 PR 的,不完整

2881099 avatar May 31 '23 02:05 2881099

var sb = new StringBuilder(@"using System;
using System.Collections.Generic;
using System.IO;

namespace FreeRedis
{
    public partial interface IRedisClient
    {
        List<Func<IInterceptor>> Interceptors { get; }

        event EventHandler<ConnectedEventArgs> Connected;
        event EventHandler<NoticeEventArgs> Notice;
        event EventHandler<UnavailableEventArgs> Unavailable;
");
            var methods = typeof(RedisClient).GetMethods().OrderBy(a =>
                a.ReturnType.IsAssignableFrom(typeof(Task)) ||
                a.ReturnType.IsGenericType && a.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)).ToArray();

            foreach (var method in methods)
            {
                var mstr = method.DisplayCsharp(false);
                mstr = mstr.Replace("public ", "")
                    .Replace("virtual ", "")
                    .Replace("System.IO.", "")
                    .Replace("System.Object.", "object")
                    .Replace("System.", "")
                    .Replace("Threading.Tasks.", "")
                    .Replace("Collections.Generic.", "")
                    .Replace("FreeRedis.Internal.", "")
                    .Replace("FreeRedis.", "")
                    .Replace("Boolean", "bool")
                    .Replace("String", "string")
                    .Replace("Int32", "int")
                    .Replace("Int64", "long")
                    .Replace("Decimal", "decimal");
                mstr = Regex.Replace(mstr, @"Nullable<(\w+)>", "$1?");
                //        sb.Append($@"
                //{method.ReturnType.DisplayCsharp(false)} {method.Name}({string.Join(", ", method.GetParameters().Select(a => a.ParameterType.DisplayCsharp(false) + " " + a.Name))})");
                sb.Append($@"
        {mstr};");
            }

            sb.Append(@"
    }
}");
            string redisInterface = sb.ToString();

2881099 avatar May 31 '23 05:05 2881099

v1.1.1

2881099 avatar May 31 '23 05:05 2881099