using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using Luticate2.Auth.Dbo.Result; using Luticate2.Auth.Interfaces; namespace Luticate2.Auth.Business.Fields.DMEC { public class LuExpressionConverterStaticMethods : LuExpressionConverter { public IDictionary Converters { get; } = new Dictionary(); public LuExpressionConverterStaticMethods(IServiceProvider serviceProvider) : base(serviceProvider) { Converters.Add(typeof(Enumerable), typeof(LuExpressionConverterEnumerable)); } protected override LuResult ConvertInternal(Stack expressions, Expression baseExpression, LuExpressionConverterOptions options) { var expression = expressions.Peek(); if (expression is MethodCallExpression methodCallExpression) { if (Converters.ContainsKey(methodCallExpression.Method.DeclaringType)) { var type = Converters[methodCallExpression.Method.DeclaringType]; var service = (ILuExpressionConverter) ServiceProvider.GetService(type); return service.ConvertExpression(expressions, baseExpression, options); } } return base.ConvertInternal(expressions, baseExpression, options); } } }