如何从ASP调用静态方法.. NET MVC控制器
本文关键字:NET MVC 控制器 静态方法 调用 ASP | 更新日期: 2023-09-27 18:08:42
GetMethod找不到公共静态方法,如果从asp.net MVC控制器调用。(从控制台应用程序,它工作正常)。
采用假SaveEntityGenericWrapper
方法求解。
如何从代码中删除SaveEntityGenericWrapper
?
为什么GetMethod("SaveEntityGeneric")
返回null
而GetMethod("SaveEntityGenericWrapper")
工作如果从asp.net MVC 2控制器调用?
如果在MVC2中使用部分信任,如何使SaveEntityGeneric
私有?
public class EntityBase() {
public void SaveEntity(EntityBase original)
{
var method = GetType().GetMethod("SaveEntityGenericWrapper");
// why this line returns null if called from ASP .NET MVC 2 controller:
// method = GetType().GetMethod("SaveEntityGeneric");
var gm = method.MakeGenericMethod(GetType());
gm.Invoke(this, new object[] { original, this });
}
// Dummy wrapper reqired for mvc reflection call only.
// How to remove it?
public List<IList> SaveEntityGenericWrapper<TEntity>(TEntity original, TEntity modified)
where TEntity : EntityBase, new()
{
return SaveEntityGeneric<TEntity>(original, modified);
}
public static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
where TEntity : EntityBase, new()
{ ... actual work is performed here }
}
您需要在GetMethod
调用中指定BindingFlags
,以便返回静态方法(我认为默认情况下只返回公共实例方法)
var method = GetType().GetMethod("SaveEntityGenericWrapper",
BindingFlags.Static|BindingFlags.Public);
干脆不要用private制造问题,勇敢尝试解决更复杂的问题。
看你以前的帖子,多么简单的是。
至少使用
internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
where TEntity : EntityBase, new()
{
...
}