一种把过滤器(Filter)附加到请求的处理管道中的方法_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 一种把过滤器(Filter)附加到请求的处理管道中的方法

一种把过滤器(Filter)附加到请求的处理管道中的方法

 2014/10/7 14:48:21  JF.Cao  程序员俱乐部  我要评论(0)
  • 摘要:大家都应该知道在ASP.NETMVC中,把一个Filter附加到控制器或动作方法上是使用的C#注解属性这个特性。今天给大家说说另一种田间方式:自动的我们定义的Filter附加到控制器或者动作方法上,而不需要手动在动作方法or控制器上使用C#的注解属性特性。第一步定义一个接口IMonoFilterProvider,接口的名称随便取,里面没有任何方法和属性,作为一个标记接口。例如:publicinterfaceIMonoFilterProvider{}第二步定义一个实现了System.Web
  • 标签:方法

  大家都应该知道在ASP.NET MVC中,把一个Filter附加到控制器或动作方法上是使用的C#注解属性这个特性。

今天给大家说说另一种田间方式:自动的我们定义的Filter附加到控制器或者动作方法上,而不需要手动在动作方法or控制器上使用C#的注解属性特性。

第一步

定义一个接口IMonoFilterProvider,接口的名称随便取,里面没有任何方法和属性,作为一个标记接口。例如:

    public interface IMonoFilterProvider
    {
    }

第二步

 定义一个实现了System.Web.Mvc.IFilterProvider接口的类,用于class="sentence" data-source="Gets or sets the filter information for an object." data-guid="5019a2a34eae399a27dba29bcf87b0d9">获取或设置对象的筛选器信息。

例如我的Mono项目中,定义了这样的一个类:

    public class MonoFilterProvider : IFilterProvider
    {

        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            var lifetimeScope = GetLifetimeScope();
            var filterProviders =lifetimescope.Resolve<IEnumerable<IMonoFilterProvider>>();
            return filterProviders.Select(x => new Filter(x, FilterScope.Action, null));
        }
    }

在GetFilters()方法中,我使用IoC容器获取所有实现了第一步中接口的类的实力。如果使用IoC容器,你就必须把实现了IMonoFilterProvider的类全部注册到IoC容器中,也就是说,你用某种方式,等到所有实现类的实例即可。


 

第三步

  把第二步骤中定义的筛选器查找类添加到Mvc的全局筛选器查找类列表中。

 FilterProviders.Providers.Add(new MonoFilterProvider());

这个动作可以在Application_Start()方法中,也可以更早。


 

第四步

定义过滤器。方式和Mvc提供的方式一样,只要再最后添加一个实现接口IMonoFilterProvider即可,

 

 

上一篇: 记者探访乔布斯安息之地 中国果粉留言放错地方 下一篇: 没有下一篇了!
发表评论
用户名: 匿名