ReferenceNode throws KeyNotFoundException when CurrentObjectFactory wasn't provided in variables. #219
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
After a change that replaced IDictionary with generic IDictionary<string, object> in EvaluationContext class, ReferenceNode throws KeyNotFoundException instead of using default context (non generic dictionaries return null when key does not exsist). I came across this bug when i was trying to resolve Spring expression like this:
expression.GetValue(arg.ExpressionContext, arg.ExpressionVariables)
, whereexpression
is of type IExpression. This forced me to add a line like this:arg.ExpressionVariables[Expression.ReservedVariableNames.RESERVEDPREFIX + "CurrentObjectFactory"] = ContextRegistry.GetContext();
in my code as a workaround.I have added a check in ReferenceNode that verifies whether key is present in dictionary, and uses default context when it's not (as was initially intended I guess). I have also created some additional unit tests that cover cases I mentioned above.