/// <summary> /// 安装完成处理 /// </summary> protected override void onCreated() { int methodIndex = methods.Length; ViewMethods = new WebView.Generator { AutoParameter = AutoParameter }.GetTypeAttributes() .getFind(value => typeof(AutoCSer.WebView.View <>).isAssignableFromGenericDefinition(value.Key) ? (value.Value == null || value.Value.IsAjax) : (value.Value != null && value.Value.IsAjax)) .GetArray(value => new ViewMethod { MethodIndex = methodIndex++, WebViewMethodType = value.Key, Attribute = value.Value ?? AutoCSer.WebView.View.DefaultAttribute, CallName = new WebView.Generator.ViewType { Type = value.Key, Attribute = value.Value ?? AutoCSer.WebView.View.DefaultAttribute, DefaultNamespace = AutoParameter.DefaultNamespace + ".", IgnoreCase = AutoParameter.WebConfig.IgnoreCase }.CallName, IsAwaitMethod = WebView.Generator.AjaxAwaitMethodTypes.Contains(value.Key) }); if (methodIndex != 0) { LeftArray <KeyValuePair <string, int> > names = (Methods = methods.ToArray()).getArray(value => value.CallName) .concat(ViewMethods.getArray(value => value.CallName)) .groupCount(value => value) .getFind(value => value.Value != 1); if (names.Length == 0) { IsPubError = false; ParameterBuilder parameterBuilder = new ParameterBuilder(); foreach (AjaxMethod method in Methods) { if (!IsPubError) { IsPubError = method.CallName == AutoCSer.WebView.AjaxBase.PubErrorCallName; } parameterBuilder.Add(method); } ParameterTypes = parameterBuilder.Get(); MethodCount = Methods.Length + ViewMethods.Length + (IsPubError ? 0 : 1); _code_.Length = 0; create(false); Coder.Add("namespace " + AutoParameter.DefaultNamespace + @" { " + _code_.ToString() + @" }"); typeScript.OnCreated(); } else { Messages.Add(@"AJAX调用名称冲突: " + names.JoinString(@" ", value => value.Key + "[" + value.Value.toString() + "]")); } } }
/// <summary> /// 添加远程缓存成员 /// </summary> /// <param name="member"></param> internal void Push(MemberIndex member) { members.Add(new RemoteLinkMember { Member = member, Attribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteLinkAttribute>(false), Index = members.Length }); cache cache = getCache(member.MemberSystemType); if (cache.Members.Length != 0) { RemoteLinkMember[] memberArray = members.ToArray(); foreach (RemoteLink nextMember in cache.Members) { Caches.Add(new RemoteLink { Members = memberArray, Method = nextMember.Method, Member = nextMember.Member, PropertyParameters = nextMember.PropertyParameters, Attribute = nextMember.Attribute }); } } foreach (MemberIndex nextMember in cache.Caches) { bool isMember = true; foreach (RemoteLinkMember cacheMember in members) { if (cacheMember.Member.MemberSystemType == nextMember.MemberSystemType) { Messages.Message("远程调用链类型循环引用 " + members.JoinString(" . ", value => value.Member.MemberType.FullName + " " + value.Member.MemberName) + " . " + nextMember.MemberType.FullName + " " + nextMember.MemberName); isMember = false; break; } } if (isMember) { Push(nextMember); } } --members.Length; }