public override T Sanitize(T value) { if (_sanitizer == null) { _sanitizer = ModelSanitizer.GetSanitizer <T>(); } return(_sanitizer.Sanitize(value)); }
public CastingSanitizer() { var sanitizer = ModelSanitizer.GetSanitizer <TInner>(); var sanitizerMethod = sanitizer.GetType().GetMethod(nameof(Sanitize)); var param = Expression.Parameter(typeof(TOuter), "value"); // ReSharper disable once AssignNullToNotNullAttribute var result = Expression.Convert(Expression.Call(Expression.Constant(sanitizer), sanitizerMethod, Expression.Convert(param, typeof(TInner))), typeof(TOuter)); var lambda = Expression.Lambda <Func <TOuter, TOuter> >(result, param); ModelSanitizer.OnExpressionBuilt?.Invoke(lambda); _sanitize = lambda.CompileFast(); }