2014-04-02 1 views
0

У меня есть фильтр пользовательских действий в приложении MVC3Получение «Ошибка привязки к целевому методу». для Delegate.CreateDelegate() в приложении MVC

public class CustomActionFilter:ActionFilterAttribute 
    { 
     public Func<IDictionary<string, object>, bool> AdditionalCheck { get; set; } 

     public CustomActionFilter() 
     { 

     } 

     public CustomActionFilter(Type declaringType, string methodName) 
     { 
      MethodInfo method = declaringType.GetMethod(methodName); 
      AdditionalCheck = (Func<IDictionary<string, object>, bool>)Delegate.CreateDelegate(typeof(Func<IDictionary<string, object>, bool>), method); 

     } 
    } 

Я хочу использовать это в качестве проверки сложения, который может быть предоставлен на действии. Проблема в том, что он выбрасывает «Ошибка привязки к целевому методу». Я создал консольное приложение, и он смог создать делегат. Это проблема в веб-проектах?

Я также попытался:

AdditionalCheck = (Func<IDictionary<string, object>, bool>)Func<IDictionary<string, object>, bool>.CreateDelegate(typeof(Func<IDictionary<string, object>, bool>), method); 

Уже прошли через подобные вопросы herehere

ответ

1

Я не знаю, если это решит вашу проблему, но код при условии, не будет работать таким образом, поскольку у вас нет экземпляра цели (типа объявления), где вы хотите вызвать свой метод.

Когда вы измените его на:

public class CustomActionFilter : ActionFilterAttribute 
{ 
    private object _target; 

    public Func<IDictionary<string, object>, bool> AdditionalCheck { get; set; } 

    public CustomActionFilter() 
    { 
    } 

    public CustomActionFilter(Type declaringType, string methodName) 
    { 
     MethodInfo method = declaringType.GetMethod(methodName); 
     _target = Activator.CreateInstance(declaringType); 
     AdditionalCheck = (Func<IDictionary<string, object>, bool>)Delegate.CreateDelegate(typeof(Func<IDictionary<string, object>, bool>),_target, method); 
    } 
} 

затем он работает в тестовом проекте (MVC 3).

Но я бы рекомендовал переосмыслить структуру кода, возможно, вы могли бы найти другой способ, без такого использования Reflection.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^