Skip to content

Commit 05ced7c

Browse files
committed
Add optional unregistered variable resolver
1 parent 14f55d2 commit 05ced7c

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

Runtime/ExpressionParser.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,12 +320,15 @@ private static ExprBuilder MakeConstant(string valueString, Func<string, T> pars
320320
public class ExpresionContext<T>
321321
{
322322
private readonly ExpresionContext<T> _parent;
323+
private readonly Func<string, Expression<T>> _unregisteredVariableResolver;
323324

324325
private readonly Dictionary<string, Expression<T>> _variables = new Dictionary<string, Expression<T>>();
325326

326-
public ExpresionContext(ExpresionContext<T> parent = null)
327+
public ExpresionContext(ExpresionContext<T> parent = null,
328+
Func<string, Expression<T>> unregisteredVariableResolver = null)
327329
{
328330
_parent = parent;
331+
_unregisteredVariableResolver = unregisteredVariableResolver;
329332
}
330333

331334
public void RegisterVariable(string name, Expression<T> value)
@@ -345,6 +348,15 @@ public Expression<T> GetVariable(string name, bool nullIsOk = false)
345348
return variable;
346349
}
347350

351+
if (_unregisteredVariableResolver != null)
352+
{
353+
variable = _unregisteredVariableResolver.Invoke(name);
354+
if (variable != null)
355+
{
356+
return variable;
357+
}
358+
}
359+
348360
var parentVariable = _parent?.GetVariable(name, nullIsOk: true);
349361
if (parentVariable != null)
350362
{

0 commit comments

Comments
 (0)