AOP 面向切面编程

  1. AOP就是在不破坏代码封装的情况下去扩展功能。
  • 聚焦业务逻辑
  • 代码复用,集中管理
  1. Filter,三种注册方式:action注册,控制器注册,全局注册。(类似特性的用法)
    全局注册:

    services.AddControllersWithViews(
                options =>
                {
                    options.Filters.Add(typeof(CustomerExceptionFilterAttribute));
                }
                );
    
  2. 特性的依赖注入
    Filter需要某个服务,怎么去获取?
    特性是编译时确定的,构造函数只能接受常量参数

  3. Filter的四种注册方式

  • 全局注册
  • ServiceFilter 注册 [ServiceFilter(typeof(CustomerExceptionFilterAttribute))] 需要在配置类中service注册一下对应的Filter
    services.AddTransient<CustomerExceptionFilterAttribute>();
  • TypeFilter [TypeFilter(typeof(CustomerExceptionFilterAttribute))]
  • IFilterFactory 需要在配置类中service注册一下对应的Filter 特性用法 [CutomerExceptionFilterFactory(typeof(CustomerExceptionFilterAttribute))]
 public class CutomerExceptionFilterFactoryAttribute : Attribute,IFilterFactory
    {
        private Type _filterType;
        public CutomerExceptionFilterFactoryAttribute(Type type)
        {
            this._filterType = type;
        }
        public bool IsReusable => true;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="serviceProvider">容器</param>
        /// IFilterMetadata是一个空接口,标识是个Filter
        /// <returns></returns>
        public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
        {
            return (IFilterMetadata)serviceProvider.GetService(_filterType);
        }
    }
  1. AOP的方式
  • Filter:MVC流程,流程外处理不了(404)
  • 中间件:任何请求最外层到达,提前做筛选过滤的工作,但中间件没有控制器的相应信息,不适合做业务逻辑控制。
  • autofac:可以深入到业务逻辑层做扩展
  1. Filter有五大类
  • Authorization Filter
  • Resource Filter 发生在控制器实例化之前 适合做缓存
  • Action Filter 发生在动作执行前后
  • Exception Filter
  • Result Filter 发生在 视图替换环节
  1. 用AOP做缓存
  • 使用Resource Filter做缓存可以避免控制器实例化和Action执行,但是视图会重新执行。因为context.Result是一个ActionResult,会执行视图
  • 业务层缓存 使用IOC进行缓存
  • ResponseCache 在请求响应时,添加了一个responseheader,来指导浏览器缓存结果
  • 中间件缓存 结合ResponseCache,在中间件完成拦截,可以完全不进入MVC services.AddResponseCaching(); app.UseResponseCaching();
    [ResponseCache(Duration = 600)] // 配合服务端缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值