示例#1
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                PathMembers.Clear();
                object    pathValue = typeof(AutoCSer.Emit.Constructor <>).MakeGenericType(Type).GetMethod("Default", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, null, NullValue <Type> .Array, null).Invoke(null, null);
                string    queryName = (Attribute.QueryName ?? (Type.Type.Name + "Id")), query;
                FieldInfo idField = Type.Type.GetField("Id", BindingFlags.Instance | BindingFlags.Public);

                if (idField == null || idField.FieldType != typeof(int))
                {
                    query = queryName + "=0";
                }
                else
                {
                    idField.SetValue(pathValue, 1);
                    query = queryName + "=1";
                }
                foreach (AutoCSer.CodeGenerator.Metadata.MemberIndex member in AutoCSer.CodeGenerator.Metadata.MethodIndex.GetMembers <AutoCSer.WebView.PathMemberAttribute>(Type, Attribute.MemberFilters, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute))
                {
                    if (member.MemberSystemType == typeof(string))
                    {
                        string url = (string)(member.Member as PropertyInfo).GetValue(pathValue, null);
                        if (url.EndsWith(query, StringComparison.Ordinal))
                        {
                            PathMembers.Add(new PathMember {
                                Member = member, Path = url.Substring(0, url.Length - query.Length), QueryName = queryName, IsHash = false, IsIdentity = true
                            });
                        }
                        else
                        {
                            PathMembers.Add(new PathMember {
                                Member = member, Path = url
                            });
                        }
                    }
                    else if (member.MemberSystemType == typeof(AutoCSer.WebView.HashUrl))
                    {
                        AutoCSer.WebView.HashUrl url = (AutoCSer.WebView.HashUrl)(member.Member as PropertyInfo).GetValue(pathValue, null);
                        if (url.Query == query)
                        {
                            PathMembers.Add(new PathMember {
                                Member = member, Path = url.Path, QueryName = queryName, IsHash = true, IsIdentity = true
                            });
                        }
                        else if (url.Query.EndsWith(query, StringComparison.Ordinal))
                        {
                            PathMembers.Add(new PathMember {
                                Member = member, Path = url.Path, OtherQuery = url.Query.Substring(0, url.Query.Length - query.Length), QueryName = queryName, IsHash = true, IsIdentity = true
                            });
                        }
                    }
                }
                if (PathMembers.Length != 0)
                {
                    _code_.Length = 0;
                    create(false);
                    code.Add(_code_);
                }
            }