c#使用存储在数据库中的方法名调用方法

本文关键字:方法 数据库 名调用 存储 | 更新日期: 2023-09-27 18:19:09

我有几个方法之一(Strategy1, Strategy2),…需要根据传入的id来调用。

是否可以在数据库中保存方法名称并使用存储的名称调用该方法?

目前,我将StrategyID保存为enum,并使用与适当的策略enum匹配的ID传递的开关语句。我不喜欢这个解决方案,因为你需要保持enum与Strategies db表同步。

我要做的是将开关从前端取出并放入db中。所以本质上我可以做一个db调用(FetchStrategiesToRun)和适当的策略列表将被返回,我可以循环通过它们直接调用方法。

如果有,如何。如果是这样,我有什么理由不想这么做吗?

c#使用存储在数据库中的方法名调用方法

这似乎类似于通过传递函数名作为字符串

来动态调用任何函数
// All error checking omitted. In particular, check the results
// of Type.GetType, and make sure you call it with a fully qualified
// type name, including the assembly if it's not in mscorlib or
// the current assembly. The method has to be a public instance
// method with no parameters. (Use BindingFlags with GetMethod
// to change this.)
public void Invoke(string typeName, string methodName)
{
    Type type = Type.GetType(typeName);
    object instance = Activator.CreateInstance(type);
    MethodInfo method = type.GetMethod(methodName);
    method.Invoke(instance, null);
}

public void Invoke<T>(string methodName) where T : new()
{
    T instance = new T();
    MethodInfo method = typeof(T).GetMethod(methodName);
    method.Invoke(instance, null);
}

更多信息在这里,使用System.Reflection;

http://www.dotnetperls.com/getmethod

using System;
using System.Reflection;
static class Methods
{
    public static void Inform(string parameter)
    {
    Console.WriteLine("Inform:parameter={0}", parameter);
    }
}
class Program
{
    static void Main()
    {
    // Name of the method we want to call.
    string name = "Inform";
    // Call it with each of these parameters.
    string[] parameters = { "Sam", "Perls" };
    // Get MethodInfo.
    Type type = typeof(Methods);
    MethodInfo info = type.GetMethod(name);
    // Loop over parameters.
    foreach (string parameter in parameters)
    {
        info.Invoke(null, new object[] { parameter });
    }
    }
}

您可以使用反射来做到这一点。下面的链接提供了如何做到这一点的示例点击这里