繁体   English   中英

如何在C#中从ASP.NET MVC控制器调用静态方法

[英]How to call static method from ASP.NET MVC controller in C#

如果从ASP .NET MVC控制器调用,则GetMethod不会找到公共静态方法。 (从控制台应用程序中,它可以正常运行)。

为了解决这个问题,使用了SaveEntityGenericWrapper方法。

如何从代码中删除SaveEntityGenericWrapper

如果从ASP .NET MVC 2控制器调用,为什么GetMethod("SaveEntityGeneric")返回nullGetMethod("SaveEntityGenericWrapper")可以工作?

如果在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()
{
    ... 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM