zoukankan      html  css  js  c++  java
  • .net core 3.1 添加拦截器(续)

    之前提到添加全局拦截器LogInterceptor,但是有些时候想针对某个类或者某个方法做拦截时,就需要再改进一下。

    LogInterceptor 是基于Autofac+Castle.DynamicProxy,Castle.Core 实现的 ,它存在一个问题,除了设置全局拦截外,最小只能针对接口或类做拦截,无法具体到某个方法。

    针对这个问题,后面我 引用了AspectCore 解决这个问题。这篇文章先不展开,先接着上文展示如何基于接口或类拦截。

    首先新建一个拦截器 MyInterceptor

    public class MyInterceptor : IInterceptor
    {
    public void Intercept(IInvocation invocation)
    {
    try
    {
    invocation.Proceed();
    NLogHelper.logger.Info(invocation.Method.Name);
    }
    catch (Exception ex)
    {
    NLogHelper.logger.Error(invocation.Method.Name + " " + ex.ToString());
    }
    }
    }

    然后Startup.cs 中ConfigureContainer代码如下

    把LogInterceptor 代码注释,但是要保留接口拦截EnableInterfaceInterceptors() ,注入MyInterceptor

    public void ConfigureContainer(ContainerBuilder builder)
    {
    //builder.RegisterType<LogInterceptor>();

    builder.RegisterType<MyInterceptor>();

    builder.RegisterType<DbFactory>().As<IDbFactory>();

    //业务逻辑层所在程序集命名空间
    Assembly service = Assembly.Load("Summer.Service"); //注:webapi要引用接口和类,不然这里读不到
    //接口层所在程序集命名空间
    Assembly repository = Assembly.Load("Summer.IService");
    //自动注入
    builder.RegisterAssemblyTypes(service, repository)
    .Where(t => t.Name.EndsWith("Service"))
    .AsImplementedInterfaces()
    .InstancePerLifetimeScope()
    .EnableInterfaceInterceptors() //开启接口拦截
    //.InterceptedBy(typeof(LogInterceptor)) //设置全局拦截器,统一由LogInterceptor拦截所有接口的调用
    ;
    }

    然后在需要拦截的接口中添加以下代码

     拦截器设置完毕,当调用ITestService 的全部方法都会跳转拦截器

  • 相关阅读:
    2015年11月27日 野外生存(一)刀
    2015年11月26日 Java基础系列(五)异常Exception
    高斯混合模型(理论+opencv实现)
    K-means算法(理论+opencv实现)
    支持向量机(理论+opencv实现)
    《图像处理实例》 之 答题卡检测
    关于VS+ImageWatch在线调试问题
    关于W8.1不能安装VS2015(包括2017等)
    《图像处理实例》 之 车牌定位
    《opencv学习》 之 OTSU算法实现二值化
  • 原文地址:https://www.cnblogs.com/redo/p/12575119.html
Copyright © 2011-2022 走看看