加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 在ASP.Net MVC 4和Autofac中注册全局过滤器

发布时间:2020-12-15 18:46:32 所属栏目:asp.Net 来源:网络整理
导读:我有一个这样的过滤器: public class CustomFilterAttribute : ActionFilterAttribute,IAuthorizationFilter{ public MyPropery Property { get; set; } ....} 我需要为我的项目中的每个动作运行 我试图在GlobalFilters注册,但是我的属性没有被注入 我试过
我有一个这样的过滤器:
public class CustomFilterAttribute : ActionFilterAttribute,IAuthorizationFilter
{
    public MyPropery Property { get; set; }
    ....
}

我需要为我的项目中的每个动作运行

我试图在GlobalFilters注册,但是我的属性没有被注入

我试过This solution注册我的过滤器,但没有被调用

有什么想法呢?

解决方法

有一种在AutoFac中注册MVC全局过滤器的新方式。首先,从您的RegisterGlobalFilter中删除过滤器注册,因为我们将Autofac句柄添加到我们的控制器/动作而不是MVC。

然后,注册您的容器如下:

var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());

builder.RegisterType<MyProperty>().As<IProperty>();

builder.Register(c => new CustomFilterAttribute(c.Resolve<IProperty>()))
                .AsActionFilterFor<Controller>().InstancePerHttpRequest();

builder.RegisterFilterProvider();

IContainer container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

请注意,通过将Controller类传递到扩展AsActionFilterFor()中,我们告诉AutoFac将此过滤器应用于从Controller类派生的所有类(在MVC中是所有控制器)。由于我们调用AsActionFilterFor()没有任何参数,我们也指定我们希望将过滤器应用于指定控制器中的所有操作。如果要将筛选器应用于选择控制器和操作,可以使用如下所示的lambda表达式:

builder.Register(c => new CustomFilterAttribute(c.Resolve<IProperty>()))
    .AsActionFilterFor<HomeController>(c => c.Index())
    .InstancePerHttpRequest();

如果您的操作需要参数,请使用default关键字来指定:

builder.Register(c => new CustomFilterAttribute(c.Resolve<IProperty>()))
    .AsActionFilterFor<HomeController>(c => c.Detail(default(int)))
    .InstancePerRequest();

请注意,您必须根据您注册的过滤器使用不同的扩展方法,以下是支持的过滤器类型:

> AsActionFilterFor> AsAuthorizationFilterFor> AsExceptionFilterFor> AsResultFilterFor

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读