2

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

为了解决这个虚拟SaveEntityGenericWrapper方法被使用。

如何SaveEntityGenericWrapper从代码中删除?

如果从 ASP .NET MVC 2 控制器调用,为什么GetMethod("SaveEntityGeneric")返回null但有效?GetMethod("SaveEntityGenericWrapper")

SaveEntityGeneric如果在 MVC2 中使用部分信任,如何将其设为私有?

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  }
}
4

2 回答 2

1

您需要BindingFlagsGetMethod调用中指定以便返回静态方法(我认为默认情况下只返回公共实例方法)

 var method = GetType().GetMethod("SaveEntityGenericWrapper",
                                  BindingFlags.Static|BindingFlags.Public);
于 2011-09-13T19:04:32.427 回答
0

根本不与私人制造问题,勇敢地尝试解决更复杂的问题。

看你之前的帖子,很简单

至少,使用

internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
{
    ... 
}
于 2011-09-14T06:56:41.913 回答