使用简单注入器对ASP.NET控制器使用拦截器

时间:2019-03-19 14:37:38

标签: asp.net-mvc aop simple-injector

我正在尝试为所有控制器添加一个拦截器。我正在使用Simple Injector和asp.net MVC。

在尝试以下示例时:https://simpleinjector.readthedocs.io/en/latest/InterceptionExtensions.html当我想将拦截器添加到接口时一切正常。问题始于Controllers,因为它们是具体类型而不是接口...

private static void ThrowIfServiceTypeNotInterface(ExpressionBuiltEventArgs e)  {
    // NOTE: We can only handle interfaces, because
    // System.Runtime.Remoting.Proxies.RealProxy only supports interfaces.
    if (!e.RegisteredServiceType.IsInterface) {
        throw new NotSupportedException("Can't intercept type " +
                    e.RegisteredServiceType.Name + " because it is not an interface.");
    }
}

在上面的实现中,仅对接口有明确的限制,我想了解为什么?

有人在向控制器/具体类型的SimpleInjector添加拦截器方面有经验吗?

1 个答案:

答案 0 :(得分:1)

  

在上面的实现中,仅对接口有明确的限制,我想了解为什么?

好吧,评论已经回答了这个问题:

// NOTE: We can only handle interfaces, because
// System.Runtime.Remoting.Proxies.RealProxy only supports interfaces.

要能够应用拦截,您将必须确保通过IController接口来解析控制器。您将在以下q / a中找到如何实现此目标的方法:How to decorate an ASP.NET MVC controller with Simple Injector