From ffb29c6fbb7da3018121e608439d203ce4262d30 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 9 May 2026 22:20:59 +0330 Subject: [PATCH] last ... --- Helpers/XGenericHelper.cs | 33 +++++++++++++++++++++++++++++++++ Models/XServiceDescriptor.cs | 19 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Models/XServiceDescriptor.cs diff --git a/Helpers/XGenericHelper.cs b/Helpers/XGenericHelper.cs index 030696d..5961031 100644 --- a/Helpers/XGenericHelper.cs +++ b/Helpers/XGenericHelper.cs @@ -39,6 +39,39 @@ namespace xCommons.Helpers genericMethod.Invoke(null, args); } + /// + /// Invoke a Generic Method of Specified Type ... + /// + /// + /// + /// + /// + public static void InvokeGenericMethod( + this Type source, + string methodName, + Type[] runtimeTypes, + params object[] args + ) + { + // + var overLoads = source.GetGenericMethodInfo( + methodName: methodName + ); + if (!overLoads.HasChild()) + { + return; + } + + // + // Detect a Method by Generic Types ... + // var method = overLoads.ElementAt(0); + var method = overLoads.First(m => m.GetGenericArguments().Length == runtimeTypes.Length); + MethodInfo genericMethod = method.MakeGenericMethod(runtimeTypes); + + // + genericMethod.Invoke(null, args); + } + /// /// Extract a Generic Method's Overloads ... /// diff --git a/Models/XServiceDescriptor.cs b/Models/XServiceDescriptor.cs new file mode 100644 index 0000000..54502bd --- /dev/null +++ b/Models/XServiceDescriptor.cs @@ -0,0 +1,19 @@ +using System; + +namespace xCommons.Models +{ + public class XServiceDescriptor + { + public Type Service { get; set; } + public Type Implementation { get; set; } + } + + public class XServiceDescriptor : XServiceDescriptor + { + public XServiceDescriptor() : base() + { + Service = typeof(TService); + Implementation = typeof(TImplmentation); + } + } +} \ No newline at end of file