首页 > 代码库 > 一种把过滤器(Filter)附加到请求的处理管道中的方法
一种把过滤器(Filter)附加到请求的处理管道中的方法
大家都应该知道在ASP.NET MVC中,把一个Filter附加到控制器或动作方法上是使用的C#注解属性这个特性。
今天给大家说说另一种田间方式:自动的我们定义的Filter附加到控制器或者动作方法上,而不需要手动在动作方法or控制器上使用C#的注解属性特性。
第一步
定义一个接口IMonoFilterProvider,接口的名称随便取,里面没有任何方法和属性,作为一个标记接口。例如:
public interface IMonoFilterProvider { }
第二步
定义一个实现了System.Web.Mvc.IFilterProvider接口的类,用于获取或设置对象的筛选器信息。
例如我的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即可,
一种把过滤器(Filter)附加到请求的处理管道中的方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。