public void CanInterceptGenericMethodWithConstraintRelatedToInterfaceOnGenericInterfaceWithConstraint() { IMethodInvocation invocation = null; var behavior = new DelegateInterceptionBehavior((inputs, getNext) => { invocation = inputs; return(getNext()(inputs, getNext)); }); var instance = Intercept.NewInstance <GenericClassWithConstraint <IEnumerable> >( new VirtualMethodInterceptor(), new[] { behavior }); instance.GenericMethodWithConstraintsOnTheInterfaceParameter <string>(null, null); Assert.IsNotNull(invocation); Assert.AreSame(typeof(string), ((MethodInfo)invocation.MethodBase).ReturnType); Assert.AreEqual(2, invocation.MethodBase.GetParameters().Count()); Assert.AreSame(typeof(IEnumerable), invocation.MethodBase.GetParameters().ElementAt(0).ParameterType); Assert.AreSame(typeof(string), invocation.MethodBase.GetParameters().ElementAt(1).ParameterType); }
//decoration logic (UI logic) in general is always convoluted. Ugh public void Decorate(Command prior, Command current) { if (current.line != null) { current.line.gameObject.SetActive(entity.isSelected); if (prior == null) { current.line.SetPosition(0, entity.position); } else { current.line.SetPosition(0, prior.line.GetPosition(1)); } if (current is Intercept) //Most specific { Intercept intercept = current as Intercept; if (intercept.isRunning)// { intercept.line.SetPosition(1, intercept.predictedMovePosition); } else { intercept.line.SetPosition(1, intercept.targetEntity.position); } intercept.line.SetPosition(2, intercept.targetEntity.position); } else if (current is Follow) // Less specific { Follow f = current as Follow; f.line.SetPosition(1, f.targetEntity.position + f.offset); f.line.SetPosition(2, f.targetEntity.position); //f.line.SetPosition(1, f.predictedMovePosition); } //Least specific //Moveposition never changes } }
/// <summary> /// 输入要漂浮的内容即可 /// </summary> /// <param name="content">要漂浮显示的内容</param> public static void OutPutPiaofuAllPage(string content) { StringBuilder strHtml = new StringBuilder(); #region 添加内容 strHtml.Append("<div id=\"codefans_net\" style=\"position:absolute\">"); strHtml.Append(content); strHtml.Append("</div>"); #endregion strHtml.Append(" <script type=\"text/javascript\"> "); strHtml.Append(" var x = 50,y = 60; "); strHtml.Append(" var xin = true, yin = true; "); strHtml.Append(" var step = 1; "); strHtml.Append(" var delay = 10; "); strHtml.Append(" var obj=document.getElementById(\"codefans_net\"); "); strHtml.Append(" function float() { "); strHtml.Append(" var L=T=0 ;"); strHtml.Append(" var R= document.body.clientWidth-obj.offsetWidth; "); strHtml.Append(" var B = document.body.clientHeight-obj.offsetHeight; "); strHtml.Append(" obj.style.left = x + document.body.scrollLeft ; "); strHtml.Append(" obj.style.top = y + document.body.scrollTop ;"); strHtml.Append(" x = x + step*(xin?1:-1) ; "); strHtml.Append(" if (x < L) { xin = true; x = L;} "); strHtml.Append(" if (x > R){ xin = false; x = R;} "); strHtml.Append(" y = y + step*(yin?1:-1); "); strHtml.Append(" if (y < T) { yin = true; y = T ;} "); strHtml.Append(" if (y > B) { yin = false; y = B ;} "); strHtml.Append(" } "); strHtml.Append(" var itl= setInterval(\"float()\", delay) ; "); strHtml.Append(" obj.onmouseover=function(){clearInterval(itl)}; "); strHtml.Append(" obj.onmouseout=function(){itl=setInterval(\"float()\", delay)}; "); strHtml.Append(" </script> "); Intercept.OutPutHtml(strHtml); }
public override void PostBuildUp(IBuilderContext context) { if (context == null) { throw new ArgumentNullException("context"); } if (!(context.Existing is IInterceptingProxy)) { var typeToIntercept = context.OriginalBuildKey.Type; // only intercept profiling for public interface types if (!typeToIntercept.IsInterface || typeToIntercept.IsNotPublic) { return; } if (_filter != null && _filter.ShouldBeProfiled(typeToIntercept)) { context.Existing = Intercept.ThroughProxy( typeToIntercept, context.Existing, new InterfaceInterceptor(), new[] { _deepProfilingBehavior }); } } }
public void CanInterceptVirtualMethodsOnGenericNestedClassInGenericClass() { IMethodInvocation invocation; var behavior = new DelegateInterceptionBehavior((inputs, getNext) => { invocation = inputs; return(getNext()(inputs, getNext)); }); var instance = Intercept.NewInstance <GenericClassWithNestedGenericClass <BaseType> .GenericNestedClass <DerivedType> >( new VirtualMethodInterceptor(), new[] { behavior }); invocation = null; instance.Test <List <DerivedType> >(); Assert.IsNotNull(invocation); Assert.AreSame(typeof(List <DerivedType>[]), ((MethodInfo)invocation.MethodBase).ReturnType); Assert.AreEqual(0, invocation.MethodBase.GetParameters().Count()); }
static void Main(string[] args) { Config = Config.LoadConfig(); if (Config?.AutomaticallyCheckForUpdatesOnStartup ?? true) { UpdateChecker.CheckUpdateDialog(false); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form = new Form1(); Form_hWnd = Form.Handle; Form.SetAutomaticallyCheckUpdatesChecked(Config?.AutomaticallyCheckForUpdatesOnStartup ?? true); Options = new OptionsStructure(); Core.Options.LoadOptions(); SplitScreenManager = new SplitScreenManager(); SplitScreenManager.Init(); MessageProcessor = new MessageProcessor(); i = new Intercept(); var x = new RawInputManager(Form_hWnd); InputDisabler.Init(); Application.Run(Form); //Not required for RegisterRawInputDevices to work SplitScreenManager.DeactivateSplitScreen(); Logger.WriteLine("Exiting application"); Environment.Exit(0); }
public void RemoveEffect(Effect mod, Intercept intercept) { if(intercepts.ContainsKey(intercept)) intercepts[intercept].Remove(mod); }
public void AddEffect(Effect mod, Intercept intercept) { if(!intercepts.ContainsKey(intercept)) intercepts[intercept] = new List<Effect>(); intercepts[intercept].Add(mod); // No-intercept mods are called immediately. if(intercept == Intercept.None) mod.Call(this, this, DamageType.Physical, 1f); }
private void button1_Click(object sender, EventArgs e) { zedGraphControl1.Visible = true; // Получим панель для рисования GraphPane pane = zedGraphControl1.GraphPane; // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы pane.CurveList.Clear(); // Создадим список точек PointPairList list = new PointPairList(); PointPairList point = new PointPairList(); try { AcceptInputValues(); } catch (Exception ex) { MessageBox.Show( ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1 ); return; } InputData.Compute_W(); double[] xAxis = new double[InputData.X.Count - 1]; double[] yAxis = new double[InputData.Y.Count - 1]; for (int i = 0; i < InputData.X.Count; i++) { if (i < InputData.X.Count - 1) { xAxis[i] = InputData.X[i]; yAxis[i] = InputData.Y[i]; } else { point.Add(InputData.X[i], InputData.Y[i]); } } list.Add(xAxis, yAxis); // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve = pane.AddCurve("Sinc", list, Color.Blue, SymbolType.Diamond); LineItem Point = pane.AddCurve("Point", point, Color.Brown, SymbolType.Square); Point.Line.IsVisible = false; myCurve.Line.IsSmooth = true; myCurve.Line.SmoothTension = 0.5F; // Вызываем метод AxisChange (), чтобы обновить данные об осях. // В противном случае на рисунке будет показана только часть графика, // которая умещается в интервалы по осям, установленные по умолчанию zedGraphControl1.GraphPane.AxisChange(); // Обновляем график zedGraphControl1.Invalidate(); Slope = SlopeDefinition(xAxis, yAxis); Intercept = InterceptDefinition(InputData.X[InputData.X.Count - 1], InputData.Y[InputData.Y.Count - 1], Slope); PotentialProduction = PotentialProductionDefinition(Slope, Intercept); slopeBox.Text = Slope.ToString("0.00e+00"); interceptBox.Text = Intercept.ToString("f3"); PotentialProdBox.Text = Math.Round(PotentialProduction).ToString(); }
/// <summary> /// 包装实例, 以便提供直接拦截实例实现的多个接口方法, 不建议使用, 建议使用单一接口合并继承 /// </summary> /// <typeparam name="T">实例</typeparam> public static T 接口拦截 <T>(T __实现, IEnumerable <Type> __additionalInterfaces, Func <MethodBase, object, object[], Tuple <object, object[]> > __action) where T : class { return(Intercept.ThroughProxyWithAdditionalInterfaces(__实现, new InterfaceInterceptor(), new IInterceptionBehavior[] { new LoggerBehavior(), new AdditionalInterfaceBehavior(__additionalInterfaces, __action) }, __additionalInterfaces)); }
/// <summary> /// 运行方法(无返回值)。 /// </summary> /// <param name="context">上下文。</param> /// <param name="intercept">拦截器。</param> public abstract void Run(InterceptContext context, Intercept intercept);
private void button1_Click(object sender, EventArgs e) { if (temperatureBox1.Text == String.Empty) { MessageBox.Show( "Please, select temperature reservoir", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1 ); return; } try { AcceptInputValues(); } catch (Exception ex) { MessageBox.Show( ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1 ); return; } definitionOfZ.gazComposition.ComputeAll(); definitionOfZ.ComputeAll(); zedGraphControl1.Visible = true; // Получим панель для рисования GraphPane pane = zedGraphControl1.GraphPane; // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы pane.CurveList.Clear(); // Создадим список точек PointPairList list = new PointPairList(); //double xmin = InputData.GasExtraction.Min(); // 0 //double xmax = InputData.GasExtraction.Max() + 100; double[] xAxis = InputData.GasExtraction.ToArray(); double[] yAxis = definitionOfZ.P_z.ToArray(); // добавим в список точки list.Add(xAxis, yAxis); // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve = pane.AddCurve("Sinc", list, Color.Blue, SymbolType.Circle); myCurve.Line.IsSmooth = true; myCurve.Line.SmoothTension = 0.5F; // Вызываем метод AxisChange (), чтобы обновить данные об осях. // В противном случае на рисунке будет показана только часть графика, // которая умещается в интервалы по осям, установленные по умолчанию zedGraphControl1.GraphPane.AxisChange(); // Обновляем график zedGraphControl1.Invalidate(); Slope = SlopeDefinition(xAxis, yAxis); Intercept = InterceptDefinition(xAxis, yAxis, Slope); InitialGasCapacity = InitialGasCapacityDefinition(Intercept, Slope); slopeBox.Text = Slope.ToString("f3"); interceptBox.Text = Intercept.ToString("f3"); initialGasBox.Text = Math.Round(InitialGasCapacity).ToString(); }
public InterceptionLoggerProvider(Intercept interceptAction) { this.interceptAction = interceptAction; }
public static IDisposable SetInterceptionLogger(Intercept interceptAction) { InternalLoggerFactory.DefaultFactory.AddProvider(new InterceptionLoggerProvider(interceptAction)); return(new Disposable(() => InternalLoggerFactory.DefaultFactory.AddProvider(new EventSourceLoggerProvider()))); }
/// <summary> /// Creates an instance of TInterface. /// </summary> /// <returns></returns> public TInterface Create(IInstanceInterceptor instanceInterceptor, Type target, TInterceptionBehavior[] behaviors) { return((TInterface)Intercept.ThroughProxy( Activator.CreateInstance(target), instanceInterceptor, behaviors)); }
/// <summary> /// Creates an instance of TInterface. /// </summary> /// <returns></returns> public TInterface Create(ITypeInterceptor typeInterceptor, TInterceptionBehavior[] behaviors) { return((TInterface)Intercept.NewInstance <object>(typeInterceptor, behaviors)); }
// Can get a sequence of points as curves come to an intersection. Take the point // of closest approach. private List <Intercept> RemoveDuplicates(List <Intercept> intercepts, float deltaDistance, float deltaTime) { List <Intercept> unique = new List <Intercept>(); List <Intercept>[] neighbours = new List <Intercept> [intercepts.Count]; for (int i = 0; i < intercepts.Count; i++) { neighbours[i] = new List <Intercept>(); } bool[] hasNeighbour = new bool[intercepts.Count]; // idea: start at top, find all entries from there that are within // deltaDistance and deltaTime mark them as neighbours // Each neighbourhood contributes the closest approach to the unique list const float expandDelta = 3f; // awkward fudge to gather a neighbourhood. // find neighbourhoods for (int i = 0; i < intercepts.Count; i++) { if (!hasNeighbour[i]) { neighbours[i].Add(intercepts[i]); for (int j = i + 1; j < intercepts.Count; j++) { if (!hasNeighbour[j]) { // a neighbour of my neighbour is my... Intercept toAdd = null; foreach (Intercept intercept in neighbours[i]) { if (Vector3.Distance(intercept.tp1.r, intercepts[j].tp1.r) < expandDelta * deltaDistance && (Mathf.Abs(intercept.tp1.t - intercepts[j].tp1.t) < deltaTime)) { toAdd = intercepts[j]; hasNeighbour[j] = true; break; } } if (toAdd != null) { neighbours[i].Add(toAdd); } } } } } // find closest pair in each neighbourhood foreach (List <Intercept> nList in neighbours) { if (nList.Count > 0) { Intercept intercept = nList[0]; float closestDistance = nList[0].dR; for (int i = 1; i < nList.Count; i++) { if (nList[i].dR < closestDistance) { closestDistance = nList[i].dR; intercept = nList[i]; } } unique.Add(intercept); } } return(unique); }
public async Task AgentPoolScanTest() { // Arrange var fixture = new Fixture(); IEnumerable <AgentPoolInfo> pools = new[] { new AgentPoolInfo { Name = "Some-Build-Azure-Linux", Id = 1 }, new AgentPoolInfo { Name = "Some-Build-Azure-Linux-Canary", Id = 2 }, new AgentPoolInfo { Name = "Some-Build-Azure-Linux-Fallback", Id = 3 }, new AgentPoolInfo { Name = "Some-Build-Azure-Linux-Preview", Id = 4 }, new AgentPoolInfo { Name = "Some-Build-Azure-Windows", Id = 5 }, new AgentPoolInfo { Name = "Some-Build-Azure-Windows-Canary", Id = 6 }, new AgentPoolInfo { Name = "Some-Build-Azure-Windows-Fallback", Id = 7 }, new AgentPoolInfo { Name = "Some-Build-Azure-Windows-Preview", Id = 8 }, new AgentPoolInfo { Name = "Some-Build-Azure-Windows-NOT-OBSERVED", Id = 9 } }; fixture.Customize <AgentStatus>(a => a.With(agent => agent.Status, "online")); var mockHttp = new MockHttpMessageHandler(); mockHttp.When(HttpMethod.Get, "https://management.azure.com/subscriptions/f13f81f8-7578-4ca8-83f3-0a845fad3cb5/resourceGroups/*/providers/Microsoft.Compute/virtualMachineScaleSets/agents/virtualmachines/*/instanceView?api-version=2018-06-01") .Respond("application/json", "{ \"placementGroupId\": \"f79e82f0-3480-4eb3-a893-5cf9bd74daad\", \"platformUpdateDomain\": 0, \"platformFaultDomain\": 0, \"computerName\": \"agents2q3000000\", \"osName\": \"ubuntu\", \"osVersion\": \"18.04\", \"vmAgent\": { \"vmAgentVersion\": \"2.2.36\", \"statuses\": [ { \"code\": \"ProvisioningState/succeeded\", \"level\": \"Info\", \"displayStatus\": \"Ready\", \"message\": \"Guest Agent is running\", \"time\": \"2019-02-22T08:17:12+00:00\" } ], \"extensionHandlers\": [] }, \"disks\": [ { \"name\": \"agents_agents_0_OsDisk_1_d0e2afd2252041e98796d5ccdcf329d0\", \"statuses\": [ { \"code\": \"ProvisioningState/succeeded\", \"level\": \"Info\", \"displayStatus\": \"Provisioning succeeded\", \"time\": \"2019-02-22T08:16:59.1325957+00:00\" } ] }, { \"name\": \"agents_agents_0_OsDisk_1_3009fa8e43e144029be77cd72065f6df\", \"statuses\": [ { \"code\": \"ProvisioningState/deleting\", \"level\": \"Info\", \"displayStatus\": \"Deleting\" } ] } ], \"statuses\": [ { \"code\": \"ProvisioningState/updating\", \"level\": \"Info\", \"displayStatus\": \"Updating\" }, { \"code\": \"PowerState/running\", \"level\": \"Info\", \"displayStatus\": \"VM running\" } ] }"); mockHttp.When(HttpMethod.Post, "https://management.azure.com/subscriptions/f13f81f8-7578-4ca8-83f3-0a845fad3cb5/resourceGroups/*/providers/Microsoft.Compute/virtualMachineScaleSets/agents/virtualmachines/*/reimage?api-version=2018-06-01") .Respond(HttpStatusCode.OK); var logAnalyticsClient = new Mock <ILogAnalyticsClient>(); var tokenProvider = new Intercept <AzureServiceTokenProvider>(); var client = new Mock <IRestClient>(); client.Setup(x => x.Get(It.IsAny <IEnumerableRequest <AgentPoolInfo> >())) .Returns(pools); client.Setup(x => x.Get(It.IsAny <IEnumerableRequest <AgentStatus> >())) .Returns(fixture.CreateMany <AgentStatus>()); // Act var function = new AgentPoolScanFunction(logAnalyticsClient.Object, client.Object, mockHttp.ToHttpClient(), tokenProvider); await function.Run(new TimerInfo(null, null), new Mock <ILogger>().Object); // Assert client .Verify(v => v.Get(It.IsAny <IEnumerableRequest <AgentPoolInfo> >()), Times.Exactly(1)); client .Verify(v => v.Get(It.IsAny <IEnumerableRequest <AgentStatus> >()), Times.Exactly(8)); logAnalyticsClient .Verify(x => x.AddCustomLogJsonAsync(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <string>()), Times.Exactly(1)); }
/// <summary> /// 包装实例, 以便提供直接拦截继承MarshalByRefObject的实例或者拦截一个接口 /// </summary> /// <typeparam name="T">实例</typeparam> public static T 透明拦截 <T>(T __实现) where T : class { return(Intercept.ThroughProxy(__实现, new TransparentProxyInterceptor(), new[] { new LoggerBehavior() })); }
/// <summary> /// 战前准备坐标设置 /// </summary> /// <param name="ground"></param> public void SetPos(Button ground) { pos.x = Intercept.getMe().GetPosForGroundName(ground.name, out y); pos.y = y; battlePos = pos; }
public InterceptionLogger(string categoryName, Intercept interceptAction) { this.categoryName = categoryName; this.interceptAction = interceptAction; }
private static Function[] ProduceFunctions() { Function[] retval = new Function[368]; retval[0] = new Count(); // COUNT retval[FunctionID.IF] = new If(); // IF retval[2] = LogicalFunction.ISNA; // IsNA retval[3] = LogicalFunction.ISERROR; // IsERROR retval[FunctionID.SUM] = AggregateFunction.SUM; // SUM retval[5] = AggregateFunction.AVERAGE; // AVERAGE retval[6] = AggregateFunction.MIN; // MIN retval[7] = AggregateFunction.MAX; // MAX retval[8] = new Row(); // ROW retval[9] = new Column(); // COLUMN retval[10] = new Na(); // NA retval[11] = new Npv(); // NPV retval[12] = AggregateFunction.STDEV; // STDEV retval[13] = NumericFunction.DOLLAR; // DOLLAR retval[14] = new Fixed(); // FIXED retval[15] = NumericFunction.SIN; // SIN retval[16] = NumericFunction.COS; // COS retval[17] = NumericFunction.TAN; // TAN retval[18] = NumericFunction.ATAN; // ATAN retval[19] = new Pi(); // PI retval[20] = NumericFunction.SQRT; // SQRT retval[21] = NumericFunction.EXP; // EXP retval[22] = NumericFunction.LN; // LN retval[23] = NumericFunction.LOG10; // LOG10 retval[24] = NumericFunction.ABS; // ABS retval[25] = NumericFunction.INT; // INT retval[26] = NumericFunction.SIGN; // SIGN retval[27] = NumericFunction.ROUND; // ROUND retval[28] = new Lookup(); // LOOKUP retval[29] = new Index(); // INDEX retval[30] = new Rept(); // REPT retval[31] = TextFunction.MID; // MID retval[32] = TextFunction.LEN; // LEN retval[33] = new Value(); // VALUE retval[34] = new True(); // TRUE retval[35] = new False(); // FALSE retval[36] = new And(); // AND retval[37] = new Or(); // OR retval[38] = new Not(); // NOT retval[39] = NumericFunction.MOD; // MOD retval[40] = new NotImplementedFunction("DCOUNT"); // DCOUNT retval[41] = new NotImplementedFunction("DSUM"); // DSUM retval[42] = new NotImplementedFunction("DAVERAGE"); // DAVERAGE retval[43] = new DStarRunner(new DMin()); // DMIN retval[44] = new NotImplementedFunction("DMAX"); // DMAX retval[45] = new NotImplementedFunction("DSTDEV"); // DSTDEV retval[46] = AggregateFunction.VAR; // VAR retval[47] = new NotImplementedFunction("DVAR"); // DVAR retval[48] = TextFunction.TEXT; // TEXT retval[49] = new NotImplementedFunction("LINEST"); // LINEST retval[50] = new NotImplementedFunction("TREND"); // TREND retval[51] = new NotImplementedFunction("LOGEST"); // LOGEST retval[52] = new NotImplementedFunction("GROWTH"); // GROWTH retval[53] = new NotImplementedFunction("GOTO"); // GOTO retval[54] = new NotImplementedFunction("HALT"); // HALT retval[56] = FinanceFunction.PV; // PV retval[57] = FinanceFunction.FV; // FV retval[58] = FinanceFunction.NPER; // NPER retval[59] = FinanceFunction.PMT; // PMT retval[60] = new Rate(); // RATE retval[61] = new Mirr(); // MIRR retval[62] = new Irr(); // IRR retval[63] = new Rand(); // RAND retval[64] = new Match(); // MATCH retval[65] = DateFunc.instance; // DATE retval[66] = new TimeFunc(); // TIME retval[67] = CalendarFieldFunction.DAY; // DAY retval[68] = CalendarFieldFunction.MONTH; // MONTH retval[69] = CalendarFieldFunction.YEAR; // YEAR retval[70] = WeekdayFunc.instance; // WEEKDAY retval[71] = CalendarFieldFunction.HOUR; retval[72] = CalendarFieldFunction.MINUTE; retval[73] = CalendarFieldFunction.SECOND; retval[74] = new Now(); retval[75] = new NotImplementedFunction("AREAS"); // AREAS retval[76] = new Rows(); // ROWS retval[77] = new Columns(); // COLUMNS retval[FunctionID.OFFSET] = new Offset(); // Offset.Evaluate has a different signature retval[79] = new NotImplementedFunction("ABSREF"); // ABSREF retval[80] = new NotImplementedFunction("RELREF"); // RELREF retval[81] = new NotImplementedFunction("ARGUMENT"); // ARGUMENT retval[82] = TextFunction.SEARCH; retval[83] = new NotImplementedFunction("TRANSPOSE"); // TRANSPOSE retval[84] = new NotImplementedFunction("ERROR"); // ERROR retval[85] = new NotImplementedFunction("STEP"); // STEP retval[86] = new NotImplementedFunction("TYPE"); // TYPE retval[87] = new NotImplementedFunction("ECHO"); // ECHO retval[88] = new NotImplementedFunction("SetNAME"); // SetNAME retval[89] = new NotImplementedFunction("CALLER"); // CALLER retval[90] = new NotImplementedFunction("DEREF"); // DEREF retval[91] = new NotImplementedFunction("WINDOWS"); // WINDOWS retval[92] = new NotImplementedFunction("SERIES"); // SERIES retval[93] = new NotImplementedFunction("DOCUMENTS"); // DOCUMENTS retval[94] = new NotImplementedFunction("ACTIVECELL"); // ACTIVECELL retval[95] = new NotImplementedFunction("SELECTION"); // SELECTION retval[96] = new NotImplementedFunction("RESULT"); // RESULT retval[97] = NumericFunction.ATAN2; // ATAN2 retval[98] = NumericFunction.ASIN; // ASIN retval[99] = NumericFunction.ACOS; // ACOS retval[FunctionID.CHOOSE] = new Choose(); retval[101] = new Hlookup(); // HLOOKUP retval[102] = new Vlookup(); // VLOOKUP retval[103] = new NotImplementedFunction("LINKS"); // LINKS retval[104] = new NotImplementedFunction("INPUT"); // INPUT retval[105] = LogicalFunction.ISREF; // IsREF retval[106] = new NotImplementedFunction("GetFORMULA"); // GetFORMULA retval[107] = new NotImplementedFunction("GetNAME"); // GetNAME retval[108] = new NotImplementedFunction("SetVALUE"); // SetVALUE retval[109] = NumericFunction.LOG; // LOG retval[110] = new NotImplementedFunction("EXEC"); // EXEC retval[111] = TextFunction.CHAR; // CHAR retval[112] = TextFunction.LOWER; // LOWER retval[113] = TextFunction.UPPER; // UPPER retval[114] = TextFunction.PROPER; // PROPER retval[115] = TextFunction.LEFT; // LEFT retval[116] = TextFunction.RIGHT; // RIGHT retval[117] = TextFunction.EXACT; // EXACT retval[118] = TextFunction.TRIM; // TRIM retval[119] = new Replace(); // Replace retval[120] = new Substitute(); // SUBSTITUTE retval[121] = new Code(); // CODE retval[122] = new NotImplementedFunction("NAMES"); // NAMES retval[123] = new NotImplementedFunction("DIRECTORY"); // DIRECTORY retval[124] = TextFunction.FIND; // Find retval[125] = new NotImplementedFunction("CELL"); // CELL retval[126] = LogicalFunction.ISERR; // IsERR retval[127] = LogicalFunction.ISTEXT; // IsTEXT retval[128] = LogicalFunction.ISNUMBER; // IsNUMBER retval[129] = LogicalFunction.ISBLANK; // IsBLANK retval[130] = new T(); // T retval[131] = new NotImplementedFunction("N"); // N retval[132] = new NotImplementedFunction("FOPEN"); // FOPEN retval[133] = new NotImplementedFunction("FCLOSE"); // FCLOSE retval[134] = new NotImplementedFunction("FSIZE"); // FSIZE retval[135] = new NotImplementedFunction("FReadLN"); // FReadLN retval[136] = new NotImplementedFunction("FRead"); // FRead retval[137] = new NotImplementedFunction("FWriteLN"); // FWriteLN retval[138] = new NotImplementedFunction("FWrite"); // FWrite retval[139] = new NotImplementedFunction("FPOS"); // FPOS retval[140] = new NotImplementedFunction("DATEVALUE"); // DATEVALUE retval[141] = new NotImplementedFunction("TIMEVALUE"); // TIMEVALUE retval[142] = new NotImplementedFunction("SLN"); // SLN retval[143] = new NotImplementedFunction("SYD"); // SYD retval[144] = new NotImplementedFunction("DDB"); // DDB retval[145] = new NotImplementedFunction("GetDEF"); // GetDEF retval[146] = new NotImplementedFunction("REFTEXT"); // REFTEXT retval[147] = new NotImplementedFunction("TEXTREF"); // TEXTREF retval[FunctionID.INDIRECT] = null; // Indirect.Evaluate has different signature retval[149] = new NotImplementedFunction("REGISTER"); // REGISTER retval[150] = new NotImplementedFunction("CALL"); // CALL retval[151] = new NotImplementedFunction("AddBAR"); // AddBAR retval[152] = new NotImplementedFunction("AddMENU"); // AddMENU retval[153] = new NotImplementedFunction("AddCOMMAND"); // AddCOMMAND retval[154] = new NotImplementedFunction("ENABLECOMMAND"); // ENABLECOMMAND retval[155] = new NotImplementedFunction("CHECKCOMMAND"); // CHECKCOMMAND retval[156] = new NotImplementedFunction("RenameCOMMAND"); // RenameCOMMAND retval[157] = new NotImplementedFunction("SHOWBAR"); // SHOWBAR retval[158] = new NotImplementedFunction("DELETEMENU"); // DELETEMENU retval[159] = new NotImplementedFunction("DELETECOMMAND"); // DELETECOMMAND retval[160] = new NotImplementedFunction("GetCHARTITEM"); // GetCHARTITEM retval[161] = new NotImplementedFunction("DIALOGBOX"); // DIALOGBOX retval[162] = TextFunction.CLEAN; // CLEAN retval[163] = new NotImplementedFunction("MDETERM"); // MDETERM retval[164] = new NotImplementedFunction("MINVERSE"); // MINVERSE retval[165] = new NotImplementedFunction("MMULT"); // MMULT retval[166] = new NotImplementedFunction("FILES"); // FILES retval[167] = new IPMT(); retval[168] = new PPMT(); retval[169] = new Counta(); // COUNTA retval[170] = new NotImplementedFunction("CANCELKEY"); // CANCELKEY retval[175] = new NotImplementedFunction("INITIATE"); // INITIATE retval[176] = new NotImplementedFunction("REQUEST"); // REQUEST retval[177] = new NotImplementedFunction("POKE"); // POKE retval[178] = new NotImplementedFunction("EXECUTE"); // EXECUTE retval[179] = new NotImplementedFunction("TERMINATE"); // TERMINATE retval[180] = new NotImplementedFunction("RESTART"); // RESTART retval[181] = new NotImplementedFunction("HELP"); // HELP retval[182] = new NotImplementedFunction("GetBAR"); // GetBAR retval[183] = AggregateFunction.PRODUCT; // PRODUCT retval[184] = NumericFunction.FACT; // FACT retval[185] = new NotImplementedFunction("GetCELL"); // GetCELL retval[186] = new NotImplementedFunction("GetWORKSPACE"); // GetWORKSPACE retval[187] = new NotImplementedFunction("GetWINDOW"); // GetWINDOW retval[188] = new NotImplementedFunction("GetDOCUMENT"); // GetDOCUMENT retval[189] = new NotImplementedFunction("DPRODUCT"); // DPRODUCT retval[190] = LogicalFunction.ISNONTEXT; // IsNONTEXT retval[191] = new NotImplementedFunction("GetNOTE"); // GetNOTE retval[192] = new NotImplementedFunction("NOTE"); // NOTE retval[193] = new NotImplementedFunction("STDEVP"); // STDEVP retval[194] = AggregateFunction.VARP; // VARP retval[195] = new NotImplementedFunction("DSTDEVP"); // DSTDEVP retval[196] = new NotImplementedFunction("DVARP"); // DVARP retval[197] = NumericFunction.TRUNC; // TRUNC retval[198] = LogicalFunction.ISLOGICAL; // IsLOGICAL retval[199] = new NotImplementedFunction("DCOUNTA"); // DCOUNTA retval[200] = new NotImplementedFunction("DELETEBAR"); // DELETEBAR retval[201] = new NotImplementedFunction("UNREGISTER"); // UNREGISTER retval[204] = new NotImplementedFunction("USDOLLAR"); // USDOLLAR retval[205] = new NotImplementedFunction("FindB"); // FindB retval[206] = new NotImplementedFunction("SEARCHB"); // SEARCHB retval[207] = new NotImplementedFunction("ReplaceB"); // ReplaceB retval[208] = new NotImplementedFunction("LEFTB"); // LEFTB retval[209] = new NotImplementedFunction("RIGHTB"); // RIGHTB retval[210] = new NotImplementedFunction("MIDB"); // MIDB retval[211] = new NotImplementedFunction("LENB"); // LENB retval[212] = NumericFunction.ROUNDUP; // ROUNDUP retval[213] = NumericFunction.ROUNDDOWN; // ROUNDDOWN retval[214] = new NotImplementedFunction("ASC"); // ASC retval[215] = new NotImplementedFunction("DBCS"); // DBCS retval[216] = new Rank(); // RANK retval[219] = new Address(); // AddRESS retval[220] = new Days360(); // DAYS360 retval[221] = new Today(); // TODAY retval[222] = new NotImplementedFunction("VDB"); // VDB retval[227] = AggregateFunction.MEDIAN; // MEDIAN retval[228] = new Sumproduct(); // SUMPRODUCT retval[229] = NumericFunction.SINH; // SINH retval[230] = NumericFunction.COSH; // COSH retval[231] = NumericFunction.TANH; // TANH retval[232] = NumericFunction.ASINH; // ASINH retval[233] = NumericFunction.ACOSH; // ACOSH retval[234] = NumericFunction.ATANH; // ATANH retval[235] = new DStarRunner(new DGet()); // DGet retval[236] = new NotImplementedFunction("CreateOBJECT"); // CreateOBJECT retval[237] = new NotImplementedFunction("VOLATILE"); // VOLATILE retval[238] = new NotImplementedFunction("LASTERROR"); // LASTERROR retval[239] = new NotImplementedFunction("CUSTOMUNDO"); // CUSTOMUNDO retval[240] = new NotImplementedFunction("CUSTOMREPEAT"); // CUSTOMREPEAT retval[241] = new NotImplementedFunction("FORMULAConvert"); // FORMULAConvert retval[242] = new NotImplementedFunction("GetLINKINFO"); // GetLINKINFO retval[243] = new NotImplementedFunction("TEXTBOX"); // TEXTBOX retval[244] = new NotImplementedFunction("INFO"); // INFO retval[245] = new NotImplementedFunction("GROUP"); // GROUP retval[246] = new NotImplementedFunction("GetOBJECT"); // GetOBJECT retval[247] = new NotImplementedFunction("DB"); // DB retval[248] = new NotImplementedFunction("PAUSE"); // PAUSE retval[250] = new NotImplementedFunction("RESUME"); // RESUME retval[252] = new NotImplementedFunction("FREQUENCY"); // FREQUENCY retval[253] = new NotImplementedFunction("AddTOOLBAR"); // AddTOOLBAR retval[254] = new NotImplementedFunction("DELETETOOLBAR"); // DELETETOOLBAR retval[FunctionID.EXTERNAL_FUNC] = null; // ExternalFunction is a FreeREfFunction retval[256] = new NotImplementedFunction("RESetTOOLBAR"); // RESetTOOLBAR retval[257] = new NotImplementedFunction("EVALUATE"); // EVALUATE retval[258] = new NotImplementedFunction("GetTOOLBAR"); // GetTOOLBAR retval[259] = new NotImplementedFunction("GetTOOL"); // GetTOOL retval[260] = new NotImplementedFunction("SPELLINGCHECK"); // SPELLINGCHECK retval[261] = new Errortype(); // ERRORTYPE retval[262] = new NotImplementedFunction("APPTITLE"); // APPTITLE retval[263] = new NotImplementedFunction("WINDOWTITLE"); // WINDOWTITLE retval[264] = new NotImplementedFunction("SAVETOOLBAR"); // SAVETOOLBAR retval[265] = new NotImplementedFunction("ENABLETOOL"); // ENABLETOOL retval[266] = new NotImplementedFunction("PRESSTOOL"); // PRESSTOOL retval[267] = new NotImplementedFunction("REGISTERID"); // REGISTERID retval[268] = new NotImplementedFunction("GetWORKBOOK"); // GetWORKBOOK retval[269] = AggregateFunction.AVEDEV; // AVEDEV retval[270] = new NotImplementedFunction("BETADIST"); // BETADIST retval[271] = new NotImplementedFunction("GAMMALN"); // GAMMALN retval[272] = new NotImplementedFunction("BETAINV"); // BETAINV retval[273] = new NotImplementedFunction("BINOMDIST"); // BINOMDIST retval[274] = new NotImplementedFunction("CHIDIST"); // CHIDIST retval[275] = new NotImplementedFunction("CHIINV"); // CHIINV retval[276] = NumericFunction.COMBIN; // COMBIN retval[277] = new NotImplementedFunction("CONFIDENCE"); // CONFIDENCE retval[278] = new NotImplementedFunction("CRITBINOM"); // CRITBINOM retval[279] = new Even(); // EVEN retval[280] = new NotImplementedFunction("EXPONDIST"); // EXPONDIST retval[281] = new NotImplementedFunction("FDIST"); // FDIST retval[282] = new NotImplementedFunction("FINV"); // FINV retval[283] = new NotImplementedFunction("FISHER"); // FISHER retval[284] = new NotImplementedFunction("FISHERINV"); // FISHERINV retval[285] = NumericFunction.FLOOR; // FLOOR retval[286] = new NotImplementedFunction("GAMMADIST"); // GAMMADIST retval[287] = new NotImplementedFunction("GAMMAINV"); // GAMMAINV retval[288] = NumericFunction.CEILING; // CEILING retval[289] = new NotImplementedFunction("HYPGEOMDIST"); // HYPGEOMDIST retval[290] = new NotImplementedFunction("LOGNORMDIST"); // LOGNORMDIST retval[291] = new NotImplementedFunction("LOGINV"); // LOGINV retval[292] = new NotImplementedFunction("NEGBINOMDIST"); // NEGBINOMDIST retval[293] = new NotImplementedFunction("NORMDIST"); // NORMDIST retval[294] = new NotImplementedFunction("NORMSDIST"); // NORMSDIST retval[295] = new NotImplementedFunction("NORMINV"); // NORMINV retval[296] = new NotImplementedFunction("NORMSINV"); // NORMSINV retval[297] = new NotImplementedFunction("STANDARDIZE"); // STANDARDIZE retval[298] = new Odd(); // ODD retval[299] = new NotImplementedFunction("PERMUT"); // PERMUT retval[300] = NumericFunction.POISSON; // POISSON retval[301] = new NotImplementedFunction("TDIST"); // TDIST retval[302] = new NotImplementedFunction("WEIBULL"); // WEIBULL retval[303] = new Sumxmy2(); // SUMXMY2 retval[304] = new Sumx2my2(); // SUMX2MY2 retval[305] = new Sumx2py2(); // SUMX2PY2 retval[306] = new NotImplementedFunction("CHITEST"); // CHITEST retval[307] = new NotImplementedFunction("CORREL"); // CORREL retval[308] = new NotImplementedFunction("COVAR"); // COVAR retval[309] = new NotImplementedFunction("FORECAST"); // FORECAST retval[310] = new NotImplementedFunction("FTEST"); // FTEST retval[311] = new Intercept(); // INTERCEPT retval[312] = new NotImplementedFunction("PEARSON"); // PEARSON retval[313] = new NotImplementedFunction("RSQ"); // RSQ retval[314] = new NotImplementedFunction("STEYX"); // STEYX retval[315] = new Slope(); // SLOPE retval[316] = new NotImplementedFunction("TTEST"); // TTEST retval[317] = new NotImplementedFunction("PROB"); // PROB retval[318] = AggregateFunction.DEVSQ; // DEVSQ retval[319] = new NotImplementedFunction("GEOMEAN"); // GEOMEAN retval[320] = new NotImplementedFunction("HARMEAN"); // HARMEAN retval[321] = AggregateFunction.SUMSQ; // SUMSQ retval[322] = new NotImplementedFunction("KURT"); // KURT retval[323] = new NotImplementedFunction("SKEW"); // SKEW retval[324] = new NotImplementedFunction("ZTEST"); // ZTEST retval[325] = AggregateFunction.LARGE; // LARGE retval[326] = AggregateFunction.SMALL; // SMALL retval[327] = new NotImplementedFunction("QUARTILE"); // QUARTILE retval[328] = AggregateFunction.PERCENTILE; // PERCENTILE retval[329] = new NotImplementedFunction("PERCENTRANK"); // PERCENTRANK retval[330] = new Mode(); // MODE retval[331] = new NotImplementedFunction("TRIMMEAN"); // TRIMMEAN retval[332] = new NotImplementedFunction("TINV"); // TINV retval[334] = new NotImplementedFunction("MOVIECOMMAND"); // MOVIECOMMAND retval[335] = new NotImplementedFunction("GetMOVIE"); // GetMOVIE retval[336] = TextFunction.CONCATENATE; // CONCATENATE retval[337] = NumericFunction.POWER; // POWER retval[338] = new NotImplementedFunction("PIVOTAddDATA"); // PIVOTAddDATA retval[339] = new NotImplementedFunction("GetPIVOTTABLE"); // GetPIVOTTABLE retval[340] = new NotImplementedFunction("GetPIVOTFIELD"); // GetPIVOTFIELD retval[341] = new NotImplementedFunction("GetPIVOTITEM"); // GetPIVOTITEM retval[342] = NumericFunction.RADIANS; ; // RADIANS retval[343] = NumericFunction.DEGREES; // DEGREES retval[344] = new Subtotal(); // SUBTOTAL retval[345] = new Sumif(); // SUMIF retval[346] = new Countif(); // COUNTIF retval[347] = new Countblank(); // COUNTBLANK retval[348] = new NotImplementedFunction("SCENARIOGet"); // SCENARIOGet retval[349] = new NotImplementedFunction("OPTIONSLISTSGet"); // OPTIONSLISTSGet retval[350] = new NotImplementedFunction("IsPMT"); // IsPMT retval[351] = new NotImplementedFunction("DATEDIF"); // DATEDIF retval[352] = new NotImplementedFunction("DATESTRING"); // DATESTRING retval[353] = new NotImplementedFunction("NUMBERSTRING"); // NUMBERSTRING retval[354] = new Roman(); // ROMAN retval[355] = new NotImplementedFunction("OPENDIALOG"); // OPENDIALOG retval[356] = new NotImplementedFunction("SAVEDIALOG"); // SAVEDIALOG retval[357] = new NotImplementedFunction("VIEWGet"); // VIEWGet retval[358] = new NotImplementedFunction("GetPIVOTDATA"); // GetPIVOTDATA retval[359] = new Hyperlink(); // HYPERLINK retval[360] = new NotImplementedFunction("PHONETIC"); // PHONETIC retval[361] = new NotImplementedFunction("AVERAGEA"); // AVERAGEA retval[362] = new Maxa(); // MAXA retval[363] = new Mina(); // MINA retval[364] = new NotImplementedFunction("STDEVPA"); // STDEVPA retval[365] = new NotImplementedFunction("VARPA"); // VARPA retval[366] = new NotImplementedFunction("STDEVA"); // STDEVA retval[367] = new NotImplementedFunction("VARA"); // VARA return(retval); }
public static void EntitiesContextInitialization <T>() where T : EntitiesContext { if (_contexts.Value.FirstOrDefault(c => c.Name == (typeof(T).Name)).IsNull()) { string sessionid = MVCEngine.Tools.Session.Session.CreateUserSession(typeof(T).Name); Task task = new Task(() => { Dictionary <MVCEngine.Model.Internal.Descriptions.DynamicProperties, string[]> dynamicList = new Dictionary <MVCEngine.Model.Internal.Descriptions.DynamicProperties, string[]>(); Context ctx = new Context() { Name = typeof(T).Name, Entites = new List <EntityClass>() }; _contexts.Value.Add(ctx); _entitiesCollection.Value.Add(ctx.Name, new Dictionary <string, Func <object, object> >()); typeof(T).GetFields().Where(f => f.FieldType.Name == "EntitiesCollection`1" && f.IsPublic). ToList().ForEach((f) => { List <string> realTimeValidator = new List <string>(); PropertyInfo ctxInfo = f.FieldType.GetProperty("Context"); Type entityType = f.FieldType.GetGenericArguments().First <Type>(); Debug.Assert(typeof(Entity).IsAssignableFrom(entityType), "Entity[" + entityType.FullName + "] it cann't be recognise as valid entity."); if (typeof(Entity).IsAssignableFrom(entityType)) { if (!_entites.Value.ContainsKey(entityType.FullName)) { EntityClass entityClass = new EntityClass(); Debug.Assert(!ctx.Entites.Exists((t) => { return(t.Name == entityType.Name); }), "Entity[" + entityType.Name + "] is defined twice."); if (!ctx.Entites.Exists((t) => { return(t.Name == entityType.Name); })) { entityClass.Name = entityType.Name; entityClass.EntityType = entityType; entityClass.Attributes.AddRange(Attribute.GetCustomAttributes(entityType)); _entitiesCollection.Value[ctx.Name].Add(entityType.Name, LambdaTools.FieldGetter(typeof(T), f)); var propertyquery = entityType.GetProperties().Where(p => p.CanRead && p.GetGetMethod().IsVirtual); propertyquery.ToList().ForEach((p) => { EntityProperty property = new EntityProperty() { Name = p.Name, PropertyType = p.PropertyType, PropertyInfo = p, Setter = p.CanWrite ? LambdaTools.PropertySetter(entityType, p) : null, Getter = LambdaTools.PropertyGetter(entityType, p) }; property.Attibutes.AddRange(Attribute.GetCustomAttributes(p)); entityClass.Properties.Add(property); if (typeof(Entity).IsAssignableFrom(p.PropertyType)) { property.ReletedEntity = new ReletedEntity() { Related = Releted.Entity, RelatedEntityName = p.PropertyType.Name }; } else if (p.PropertyType.Name == "EntitiesCollection`1") { property.ReletedEntity = new ReletedEntity() { Related = Releted.List, RelatedEntityName = p.PropertyType.GetGenericArguments().First <Type>().Name }; } Attribute.GetCustomAttributes(p).ToList().ForEach((a) => { Relation relation = null; Discriminator discriminator = null; PropertyValidator validator = null; DefaultValue defaultValue = null; Synchronized synchronized = null; Formatter formatter = null; NotIntercept notIntercept = null; Intercept intercept = null; attribute.DynamicProperties dynamicProperties = null; if (a.IsTypeOf <PrimaryKey>()) { Debug.Assert(entityClass.Properties.FirstOrDefault(primary => primary.PrimaryKey).IsNull(), "Entity[" + entityType.Name + "] at least two primary key property defined"); property.PrimaryKey = true; entityClass.PrimaryKeyProperty = property; entityClass.PrimaryKey = property.Getter; } else if ((relation = a.CastToType <Relation>()).IsNotNull()) { EntitiesRelation r = ctx.Relations.FirstOrDefault(re => re.Name == relation.RelationName); Debug.Assert(r.IsNull(), "Relation[" + relation.RelationName + "] is declared at least twice"); if (property.ReletedEntity.IsNotNull()) { EntitiesRelation entityrelation = new EntitiesRelation() { Name = relation.RelationName, Parent = new EntityRelated() { EntityName = relation.ParentEntity, Key = relation.ParentProperty }, Child = new EntityRelated() { EntityName = relation.ChildEntity, Key = relation.ChildProperty }, OnDelete = relation.OnDelete, OnAccept = relation.OnAccept, OnFreeze = relation.OnFreeze }; ctx.Relations.Add(entityrelation); property.ReletedEntity.Relation = entityrelation; } } else if ((synchronized = a.CastToType <Synchronized>()).IsNotNull()) { if (property.ReletedEntity.IsNotNull()) { property.ReletedEntity.Synchronized = true; } } else if ((discriminator = a.CastToType <Discriminator>()).IsNotNull()) { if (property.ReletedEntity.IsNotNull()) { property.ReletedEntity.Discriminators.Add(discriminator); } } else if ((validator = a.CastToType <PropertyValidator>()).IsNotNull()) { property.Validators.Add(validator); } else if ((defaultValue = a.CastToType <DefaultValue>()).IsNotNull()) { property.DefaultValue = defaultValue; } else if ((dynamicProperties = a.CastToType <attribute.DynamicProperties>()).IsNotNull()) { if (property.ReletedEntity.IsNotNull() && property.ReletedEntity.Related == Releted.List) { entityClass.DynamicProperties = new Internal.Descriptions.DynamicProperties() { CodeProperty = dynamicProperties.CodeProperty, Property = property, }; dynamicList.Add(entityClass.DynamicProperties, dynamicProperties.ValueProperties); } } else if ((formatter = a.CastToType <Formatter>()).IsNotNull()) { property.AddFormatter(formatter); } else if ((notIntercept = a.CastToType <NotIntercept>()).IsNotNull()) { if (notIntercept.InterceptorId.IsNullOrEmpty()) { property.RemoveGetInterceptor(string.Empty); property.RemoveSetInterceptor(string.Empty); } else { if (notIntercept.Method == Method.Get) { property.RemoveGetInterceptor(notIntercept.InterceptorId); } else { property.RemoveSetInterceptor(notIntercept.InterceptorId); } } } else if ((intercept = a.CastToType <Intercept>()).IsNotNull() && intercept.Method.IsNotNull()) { if (intercept.Method.Contains(Method.Get)) { property.AddGetInterceptor(intercept.InterceptorId); } if (intercept.Method.Contains(Method.Set)) { property.AddSetInterceptor(intercept.InterceptorId); } } }); }); Attribute.GetCustomAttributes(entityType).ToList().ForEach((a) => { EntityValidator validator = null; if ((validator = a.CastToType <EntityValidator>()).IsNotNull()) { entityClass.Validators.Add(validator); } }); ctx.Entites.Add(entityClass); } _entites.Value.Add(entityType.FullName, entityClass); } else { ctx.Entites.Add(_entites.Value[entityType.FullName]); } } }); ctx.Relations.ForEach((r) => { EntityClass entity = ctx.Entites.FirstOrDefault(e => e.Name == r.Parent.EntityName); Debug.Assert(entity.IsNotNull(), "Relation[" + r.Name + "] parent entity not found"); r.Parent.Entity = entity; EntityProperty property = entity.Properties.FirstOrDefault(p => p.Name == r.Parent.Key); Debug.Assert(property.IsNotNull(), "Entity[" + entity.Name + "] property[" + r.Parent.Key + "] not defined"); r.Parent.Type = property.PropertyType; r.Parent.Value = property.Getter; EntityClass childEntity = ctx.Entites.FirstOrDefault(e => e.Name == r.Child.EntityName); Debug.Assert(childEntity.IsNotNull(), "Relation[" + r.Name + "] child entity not found"); r.Child.Entity = childEntity; EntityProperty childProperty = childEntity.Properties.FirstOrDefault(p => p.Name == r.Child.Key); Debug.Assert(childProperty.IsNotNull(), "Entity[" + childEntity.Name + "] property[" + r.Child.Key + "] not defined"); r.Child.Type = childProperty.PropertyType; r.Child.Value = childProperty.Getter; }); var reletedquery = ctx.Entites.Where(e => e.Properties.Count(p => p.ReletedEntity.IsNotNull()) > 0). SelectMany(e => e.Properties.Where(p => p.ReletedEntity.IsNotNull()), (e, p) => new { Entity = e, Property = p }); reletedquery.ToList().ForEach((ep) => { EntityClass entityClass = ctx.Entites.FirstOrDefault(e => e.Name == ep.Property.ReletedEntity.RelatedEntityName); Debug.Assert(entityClass.IsNotNull(), "Entity[" + ep.Property.ReletedEntity.RelatedEntityName + "] dosen't have collection"); ep.Property.ReletedEntity.RelatedEntity = entityClass; if (ep.Property.ReletedEntity.Relation.IsNull()) { if (!ep.Property.ReletedEntity.RelationName.IsNullOrEmpty()) { EntitiesRelation relation = ctx.Relations.FirstOrDefault(r => r.Name == ep.Property.ReletedEntity.RelationName); Debug.Assert(relation.IsNotNull(), "Relation[" + ep.Property.ReletedEntity.RelationName + "] not defined"); ep.Property.ReletedEntity.Relation = relation; } else { List <EntitiesRelation> relations = null; if (ep.Property.ReletedEntity.Related == Releted.Entity) { relations = ctx.Relations.Where(r => r.Parent.EntityName == ep.Property.ReletedEntity.RelatedEntityName && r.Child.EntityName == ep.Entity.Name).ToList(); } else { relations = ctx.Relations.Where(r => r.Parent.EntityName == ep.Entity.Name && r.Child.EntityName == ep.Property.ReletedEntity.RelatedEntityName).ToList(); } Debug.Assert(relations.Count() < 2, "Relation[" + ep.Property.ReletedEntity.RelatedEntityName + "-" + ep.Entity.Name + "] more then one"); if (relations.Count() == 1) { ep.Property.ReletedEntity.Relation = relations[0]; } } } if (ep.Property.ReletedEntity.Synchronized) { ep.Property.ReletedEntity.RelatedEntity.Synchronized(ep.Entity.Name, ep.Property.Name); } if (ep.Property.ReletedEntity.Related == Releted.List) { ep.Property.AddGetInterceptor(CollectionInterceptorDispatcher.GetId(ep.Property.ReletedEntity.Relation.Child.Entity.EntityType)); } else { ep.Property.AddGetInterceptor(EntityInterceptorDispatcher.GetId(ep.Property.ReletedEntity.RelatedEntityName)); } }); foreach (MVCEngine.Model.Internal.Descriptions.DynamicProperties dynamicProperty in dynamicList.Keys) { foreach (string p in dynamicList[dynamicProperty]) { EntityProperty property = dynamicProperty.Property.ReletedEntity.RelatedEntity.Properties.FirstOrDefault(pr => pr.Name == p); if (property.IsNotNull()) { dynamicProperty.ValuesProperties.Add(property.PropertyType, property.Name); } } } }); task.ContinueWith((antecedent) => { MVCEngine.Tools.Session.Session.ReleaseSession(sessionid); }); task.ContinueWith((antecedent) => { if (_contexts.IsValueCreated) { _contexts.Value.Clear(); } //ToDo log exception into log file }, TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnFaulted); MVCEngine.Tools.Session.Session.SetSessionData(sessionid, "InitializeTask", task); task.Start(); } }
/// <summary> /// Resets this indicator and all sub-indicators (Intercept, Slope) /// </summary> public override void Reset() { Intercept.Reset(); Slope.Reset(); base.Reset(); }
/// <summary> /// 运行方法(非异步且有返回值)。 /// </summary> /// <param name="context">上下文。</param> /// <param name="intercept">拦截器。</param> public abstract T Run <T>(InterceptContext context, Intercept <T> intercept);
/// <summary> /// 包装实例, 以便提供直接拦截实例中的虚方法 /// </summary> /// <typeparam name="T">实例</typeparam> public static T 虚方法拦截 <T>(params object[] __构造参数) where T : class { return(Intercept.NewInstance <T>(new VirtualMethodInterceptor(), new[] { new LoggerBehavior() }, __构造参数)); }
/// <inheritdoc /> public override void Run(InterceptContext context, Intercept intercept) { intercept.Run(context); }
/// <summary> /// 包装实例, 以便提供直接拦截实例实现的接口方法 /// </summary> /// <typeparam name="T">实例</typeparam> public static T 接口拦截 <T>(T __实现) where T : class { return(Intercept.ThroughProxy(__实现, new InterfaceInterceptor(), new[] { new LoggerBehavior() })); }
public override int GetHashCode() { return(Slope.GetHashCode() + Intercept.GetHashCode()); }
/// <inheritdoc /> public override T Run <T>(InterceptContext context, Intercept <T> intercept) { return(intercept.Run(context)); }
public AopProduct(IProduct product) { _product = Intercept.ThroughProxy(product, new InterfaceInterceptor(), new IInterceptionBehavior[] { new LoggingInterceptionBehavior() }); }
public void Should_clear_intercepts_between_calls() { Intercept.Clear(); }