Как вызвать статический метод из контроллера ASP.NET MVC в C # - PullRequest
2 голосов
/ 13 сентября 2011

GetMethod не находит общедоступный статический метод при вызове из контроллера ASP .NET MVC.(Из консольного приложения все в порядке).

Для решения этого фиктивного метода SaveEntityGenericWrapper используется.

Как удалить SaveEntityGenericWrapper из кода?

Почему GetMethod("SaveEntityGeneric") возвращает null, но GetMethod("SaveEntityGenericWrapper") работает, если вызывается из контроллера ASP .NET MVC 2?

Как сделать 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  }
}

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Вам необходимо указать BindingFlags в вызове GetMethod, чтобы восстановить статические методы (я думаю, что по умолчанию возвращаются только общедоступные методы экземпляра)

 var method = GetType().GetMethod("SaveEntityGenericWrapper",
                                  BindingFlags.Static|BindingFlags.Public);
0 голосов
/ 14 сентября 2011

Просто не создавайте проблем с приватными , пытаясь решить смело более сложные проблемы.

См. Ваш предыдущий пост, как просто он был .

Как минимум, используйте

internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
{
    ... 
}
...