/// <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); } }
/// <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(); }
/// <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); }