2881099 / FreeRedis

🦄 FreeRedis is .NET40+ redis client. supports cluster, sentinel, master-slave, pub-sub, lua, pipeline, transaction, streams, client-side-caching, and pooling.
MIT License
911 stars 160 forks source link

IRedisClient add async method #148

Open tky753 opened 1 year ago

tky753 commented 1 year ago

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

2881099 commented 1 year ago

IRedisClient 是社区 PR 的,不完整

2881099 commented 1 year ago
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 commented 1 year ago

v1.1.1