c#使用存储在数据库中的方法名调用方法
本文关键字:方法 数据库 名调用 存储 | 更新日期: 2023-09-27 18:19:09
我有几个方法之一(Strategy1, Strategy2),…需要根据传入的id来调用。
是否可以在数据库中保存方法名称并使用存储的名称调用该方法?
目前,我将StrategyID保存为enum,并使用与适当的策略enum匹配的ID传递的开关语句。我不喜欢这个解决方案,因为你需要保持enum与Strategies db表同步。
我要做的是将开关从前端取出并放入db中。所以本质上我可以做一个db调用(FetchStrategiesToRun)和适当的策略列表将被返回,我可以循环通过它们直接调用方法。
如果有,如何。如果是这样,我有什么理由不想这么做吗?
这似乎类似于通过传递函数名作为字符串
来动态调用任何函数// 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/getmethodusing 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 });
}
}
}
您可以使用反射来做到这一点。下面的链接提供了如何做到这一点的示例点击这里