internal TemplateVisitor(ITemplateContext ctx, ExpressionLanguageEngineConfig cfg) { _ctx = ctx; _engine = ExpressionLanguageEngine.CreateEngine(cfg, _ctx); _str = new StringBuilder(); }
private TemplateEngine(string path, ITemplateContext ctx, ICache <string, TemplateAST> cache, ExpressionLanguageEngineConfig cfg) { _ctx = ctx ?? new TemplateContext(); _cache = cache ?? NoCache.GetInstance <string, TemplateAST>(); _cfg = cfg ?? ExpressionLanguageEngineConfig.Default; if (string.IsNullOrEmpty(path)) { _path = Runtime.StartupDirectory; } else { _path = System.IO.Path.GetFullPath(path); } }
protected override void DoCheck(IValidateResult result, object instance, object propertyValue) { //Extend:use cache to improve performance. ExpressionLanguageEngineConfig cfg = new ExpressionLanguageEngineConfig(EvalExceptionHandlingPolicy.IgnorePolicy); ExpressionLanguageEngine engine = ExpressionLanguageEngine.CreateEngine(cfg); engine.Assign(INSTANCE, instance); engine.Assign(VALUE, propertyValue); object b = engine.Eval(_expr); if (!engine.EvalToBool(b)) { string msg = string.Format(MSG, _pInfo.Name, instance.GetType().Name, propertyValue, _expr); this.LogValidateResult(result, msg); } }
/// <summary> /// Build up a template engine. /// </summary> /// <param name="path">All template files is supposed in a specified directory(include sub directory). /// If it is null, will use current app directory. /// </param> /// <param name="ctx">Template context, also work as EL context when eval expresion in the template.</param> /// <param name="cache">Template AST cache.</param> /// <param name="cfg">the EL engine (which used in eval expression in the template) create config.</param> /// <returns>Instance of template engine.</returns> public static TemplateEngine CreateInstance(string path = null, ITemplateContext ctx = null, ICache <string, TemplateAST> cache = null, ExpressionLanguageEngineConfig cfg = null) { return(new TemplateEngine(path, ctx, cache, cfg)); }