我在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);
答案 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)。
但是我建议重新考虑你的代码结构,也许你可以找到另一种方法,而不使用反射。
希望这有帮助。