public void TestMethod_26() { Dictionary<string, object> vars = new Dictionary<string, object>(); vars["_sprint_context_resove_"] = new SprintContextResove((type,name) => { if (name == "Inventor") return new Inventor("a", DateTime.Now, "d"); return new Inventor2("a", DateTime.Now, "d"); }); // var IsMember = ExpressionEvaluator.GetValue(null, "@(Inventor).IsMember('Nikola Tesla1')", vars); var IsMember2 = ExpressionEvaluator.GetValue(null, "@(SpringELTest.Inventor2,SpringELTest@ddd).IsMember('Nikola Tesla1')", vars); }
/// <summary> /// Returns a value for the integer literal node. /// </summary> /// <param name="context">Context to evaluate expressions against.</param> /// <param name="evalContext">Current expression evaluation context.</param> /// <returns>Node's value.</returns> protected override object Get(object context, EvaluationContext evalContext) { if (!evalContext.Variables.TryGetValue("_sprint_context_resove_", out object Resove)) { return(null); } string objectName; if (this.getNumberOfChildren() == 2) { objectName = this.getFirstChild().getNextSibling().getText(); } else { objectName = this.getFirstChild().getText(); } SprintContextResove deResove = (SprintContextResove)Resove; var typeName = objectName.Split('@'); if (typeName.Length > 2) { throw new TypeMismatchException($"`{objectName}` formatter invalid"); } Type type = System.Type.GetType(typeName[0], false); if (type == null) { return(deResove.Invoke(null, typeName.FirstOrDefault())); } return(deResove.Invoke(type, typeName.Length > 1?typeName.Last():null)); }