获取'绑定到目标方法的错误'。 for MVC应用程序中的Delegate.CreateDelegate()

时间:2014-04-02 16:02:20

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 c#-4.0 delegates

我在MVC3应用程序中有自定义操作过滤器

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);

        }
    }

我想将此作为可以在Action上提供的附加检查。问题是它抛出&#39; 绑定到目标方法的错误&#39;。我创建了一个控制台应用程序,它能够创建委托。这是网络项目中的问题吗?

我也尝试过:

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

已经完成了类似的问题here here

1 个答案:

答案 0 :(得分:1)

我不知道它是否能解决您的问题,但您提供的代码不会以这种方式工作,因为您没有目标(声明类型)的实例,您想要调用您的方法。< / p>

当您将其更改为:

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)。

但是我建议重新考虑你的代码结构,也许你可以找到另一种方法,而不使用反射。

希望这有帮助。