コード例 #1
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                LeftArray <RemoteMethod> remoteMethods = new LeftArray <RemoteMethod>();

                foreach (MethodIndex method in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.MethodAttribute>(Type, AutoCSer.Metadata.MemberFilters.Static, false, true, false))
                {
                    if (!method.Method.IsGenericMethodDefinition)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = method.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            MethodParameter[] parameters = method.Parameters;
                            if (parameters.Length >= 1 && parameters[0].ParameterType == Type.Type)
                            {
                                remoteMethods.Add(new RemoteMethod {
                                    Type = Type, ProjectParameter = AutoParameter, Method = method, MethodParameters = parameters, Attribute = remoteAttribute
                                });
                            }
                        }
                    }
                }
                RemoteMethods = remoteMethods.ToArray();

                setRemoteMemberCache();

                if ((RemoteMethods.Length | RemoteMembers.Length | RemoteCaches.Length) != 0)
                {
                    create(true);
                }
            }
コード例 #2
0
ファイル: SqlTable.cs プロジェクト: zlzforever/AutoCSer
            /// <summary>
            /// 设置远程缓存成员集合
            /// </summary>
            protected void setRemoteMemberCache()
            {
                LeftArray <RemoteMember> remoteMembers = new LeftArray <RemoteMember>();

                foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstanceProperty, true, false))
                {
                    if (member.CanGet)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            if (member.IsField || ((PropertyInfo)member.Member).GetIndexParameters().Length == 0)
                            {
                                remoteMembers.Add(new RemoteMember {
                                    Member = member, Attribute = remoteAttribute
                                });
                            }
                        }
                    }
                }
                foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Sql.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, false, true, false))
                {
                    if (!member.Method.IsGenericMethodDefinition)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            remoteMembers.Add(new RemoteMember {
                                Method = member, Attribute = remoteAttribute
                            });
                        }
                    }
                }
                RemoteMembers = remoteMembers.ToArray();

                RemoteCacheBuilder cacheBuilder = new RemoteCacheBuilder();

                foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberCacheAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, true, false))
                {
                    cacheBuilder.Push(member);
                }
                RemoteCaches = cacheBuilder.Caches.ToArray();
            }
コード例 #3
0
ファイル: SqlTable.cs プロジェクト: zlzforever/AutoCSer
                /// <summary>
                /// 获取成员集合
                /// </summary>
                /// <param name="type"></param>
                /// <returns></returns>
                private static cache getCache(Type type)
                {
                    cache members;

                    if (!memberCache.TryGetValue(type, out members))
                    {
                        LeftArray <RemoteCache> remoteMembers = new LeftArray <RemoteCache>();
                        foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, true, false))
                        {
                            if (member.CanGet)
                            {
                                AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    remoteMembers.Add(new RemoteCache {
                                        Member = member, PropertyParameters = member.IsField ? NullValue <MethodParameter> .Array : MethodParameter.Get(((PropertyInfo)member.Member).GetGetMethod(true), NullValue <Type> .Array), Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                        foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Sql.RemoteMemberAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, false, true, false))
                        {
                            if (!member.Method.IsGenericMethodDefinition)
                            {
                                AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    remoteMembers.Add(new RemoteCache {
                                        Method = member, Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                        memberCache.Add(type, members = new cache {
                            Members = remoteMembers.ToArray(), Caches = MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberCacheAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, true, false)
                        });
                    }
                    return(members);
                }