Coldairarrow / EFCore.Sharding

Database Sharding For EFCore
Apache License 2.0
694 stars 143 forks source link

字段枚举注释补充(参考swagger处理)、注释优化 #83

Closed Coldairarrow closed 3 years ago

Coldairarrow commented 3 years ago

Namotion.Reflection

/// <summary>
/// 
/// </summary>
public class EnumSchemaProcessor : ISchemaProcessor
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="context"></param>
    public void Process(SchemaProcessorContext context)
    {
        var type = context.Type;
        if (!type.IsEnum)
        {
            return;
        }

        var sb = new StringBuilder();
        sb.AppendLine(type.GetXmlDocsSummary());

        var members = type.GetMembers();
        var schema = context.Schema;
        for (var i = 0; i < schema.Enumeration.Count; i++)
        {
            var item = schema.Enumeration.ElementAt(i);
            var enumName = Enum.GetName(type, item);

            var summary = members.FirstOrDefault(a => a.Name == enumName)
                                 .GetXmlDocsSummary();

            sb.AppendLine($"{item} = {summary}");
        }

        schema.Description = sb.ToString();
    }
}
Coldairarrow commented 3 years ago
var comment = typeof(RoleTypes).GetXmlDocsSummary();
            List<string> comments = new List<string>() { comment };

            foreach (var aValue in Enum.GetValues(typeof(RoleTypes)))
            {
                var memberComment = typeof(RoleTypes).GetMembers()
                    .Where(x => x.Name == aValue.ToString())
                    .FirstOrDefault()
                    .GetXmlDocsSummary();
                comments.Add($"{(int)aValue}={memberComment}");
            }

            Console.WriteLine(string.Join(" ", comments));
Coldairarrow commented 3 years ago
//字段注释,需要开启程序集XML文档
            if (ShardingOption.EnableComments)
            {
                foreach (var entityType in modelBuilder.Model.GetEntityTypes())
                {
                    foreach (var property in entityType.GetProperties())
                    {
                        if (property.PropertyInfo == null)
                        {
                            continue;
                        }

                        StringBuilder comment = new StringBuilder(property.PropertyInfo.GetXmlDocsSummary());

                        if (property.PropertyInfo.PropertyType.IsEnum)
                        {
                            foreach (var aValue in Enum.GetValues(property.PropertyInfo.PropertyType))
                            {
                                var memberComment = property.PropertyInfo.PropertyType.GetMembers()
                                    .Where(x => x.Name == aValue.ToString())
                                    .FirstOrDefault()?
                                    .GetXmlDocsSummary();
                                comment.Append($" {(int)aValue}={memberComment}");
                            }
                        }
                        property.SetComment(comment.ToString());
                    }
                }
            }