@@ -18,6 +18,8 @@ internal class ExpressionHandler : IExpressionHandler
1818 private Interpreter _interpreter ;
1919#endif
2020
21+ private bool TryCompile { get ; set ; } = true ;
22+
2123 public ExpressionHandler ( )
2224 {
2325 _interpreter = CreateInterpreter ( ) ;
@@ -76,13 +78,23 @@ public bool Invoke<TRequest, TPolicy>(in EnforceContext context, string expressi
7678 return func ( request , policy ) ;
7779 }
7880
79- if ( _cachePool . TryGetFunc ( expressionString ,
80- out Func < TRequest , TPolicy , bool > genericFunc ) is not false )
81+ if ( _cachePool . TryGetFunc ( expressionString , out Func < TRequest , TPolicy , bool > genericFunc ) )
82+ {
83+ return genericFunc is not null && genericFunc ( request , policy ) ;
84+ }
85+
86+ if ( TryCompile is false )
8187 {
88+ genericFunc = CompileExpression < TRequest , TPolicy > ( in context , expressionString ) ;
89+ _cachePool . SetFunc ( expressionString , genericFunc ) ;
8290 return genericFunc ( request , policy ) ;
8391 }
8492
85- genericFunc = CompileExpression < TRequest , TPolicy > ( in context , expressionString ) ;
93+ if ( TryCompileExpression ( in context , expressionString , out genericFunc ) is false )
94+ {
95+ _cachePool . SetFunc ( expressionString , genericFunc ) ;
96+ return false ;
97+ }
8698 _cachePool . SetFunc ( expressionString , genericFunc ) ;
8799 return genericFunc ( request , policy ) ;
88100 }
@@ -96,6 +108,23 @@ private Func<TRequest, TPolicy, bool> CompileExpression<TRequest, TPolicy>(in En
96108 context . View . RequestType , context . View . PolicyType ) ;
97109 }
98110
111+ private bool TryCompileExpression < TRequest , TPolicy > ( in EnforceContext context ,
112+ string expressionString , out Func < TRequest , TPolicy , bool > func )
113+ where TRequest : IRequestValues
114+ where TPolicy : IPolicyValues
115+ {
116+ try
117+ {
118+ func = CompileExpression < TRequest , TPolicy > ( in context , expressionString ) ;
119+ }
120+ catch ( Exception )
121+ {
122+ func = null ;
123+ return false ;
124+ }
125+ return true ;
126+ }
127+
99128 private Interpreter CreateInterpreter ( )
100129 {
101130 var interpreter = new Interpreter ( ) ;
0 commit comments