選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

LuExpressionConverterStaticMethods.cs 1.5KB

1234567891011121314151617181920212223242526272829303132333435
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using Luticate2.Auth.Dbo.Result;
  6. using Luticate2.Auth.Interfaces;
  7. namespace Luticate2.Auth.Business.Fields.DMEC
  8. {
  9. public class LuExpressionConverterStaticMethods : LuExpressionConverter<LuExpressionConverterStaticMethods, LuExpressionConverterStaticMethods>
  10. {
  11. public IDictionary<Type, Type> Converters { get; } = new Dictionary<Type, Type>();
  12. public LuExpressionConverterStaticMethods(IServiceProvider serviceProvider) : base(serviceProvider)
  13. {
  14. Converters.Add(typeof(Enumerable), typeof(LuExpressionConverterEnumerable));
  15. }
  16. protected override LuResult<Expression> ConvertInternal(Stack<Expression> expressions, Expression baseExpression, LuExpressionConverterOptions options)
  17. {
  18. var expression = expressions.Peek();
  19. if (expression is MethodCallExpression methodCallExpression)
  20. {
  21. if (Converters.ContainsKey(methodCallExpression.Method.DeclaringType))
  22. {
  23. var type = Converters[methodCallExpression.Method.DeclaringType];
  24. var service = (ILuExpressionConverter) ServiceProvider.GetService(type);
  25. return service.ConvertExpression(expressions, baseExpression, options);
  26. }
  27. }
  28. return base.ConvertInternal(expressions, baseExpression, options);
  29. }
  30. }
  31. }