惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
雷峰网
雷峰网
IT之家
IT之家
I
InfoQ
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
月光博客
月光博客
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
G
Google Developers Blog
小众软件
小众软件
宝玉的分享
宝玉的分享
Jina AI
Jina AI
V
Visual Studio Blog

博客园 - 风雨行者

使用 Qjx.CustomCache 在接口进行AOP 数据缓存 asp.net core 基于autofac 实现AOP 拦截 之 第二种方式 -基于class asp.net core 3.1 应用Aufac 进行AOP 的三种方式1 基于接口AOP linux之 tomcat 安装配置入门 linux的nginx的安装以及负载均衡 linux 系统管理 linux 服务管理 redis主从复制 读写分离 Redis 集群部署之Redis 安装(1) hbuilder 运行在 android 模拟器中 asp.net digest 摘要认证过程 转载:Spring Boot 不使用默认的 parent,改用自己的项目的 paren .NET Core CLI 的性能诊断介绍 转载学习:windows下将ES和kibana作为服务启动 转(以作记录):cmd命令行---进行Windows服务操作 在 .NET Core 中使用 Diagnostics MyEclipse 使用外部tomcat 调试springboot Git与GitHub 学习笔记 dropdownlist 支持键盘拼音定位选择
asp.net core 基于autofac 实现AOP 拦截 之 第三种方式 -基于...
风雨行者 · 2021-04-13 · via 博客园 - 风雨行者

Autofac 官方地址:https://autofaccn.readthedocs.io/en/latest/advanced/interceptors.html

(1)引用 nuget :Autofac.Extensions.DependencyInjection  Autofac.Extras.DynamicProxy

(2)修改入口文件

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                //改用Autofac来实现依赖注入
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    
                });

(3)修改startup 文件

     //autofac 新增
        public ILifetimeScope AutofacContainer { get; private set; }
  public void ConfigureContainer(ContainerBuilder builder)
        {
}

(4)创建AOP拦截文件

using Castle.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Aufac
{
    public class CacheIntercept : IInterceptor
    {
        public CacheIntercept()
        { }
        public void Intercept(IInvocation invocation)
        {
            var method = invocation.MethodInvocationTarget ?? invocation.Method;
            Debug.WriteLine("before");
            invocation.Proceed();
            Debug.WriteLine("end");
        }
    }
}

(4)应用拦截效果

      4-1 使用类进行AOP

       4.1.1 创建以下类文件

using Autofac.Extras.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Aufac
{

/// <summary>
/// 类的AOP方式2
/// </summary>
[Intercept(typeof(CacheIntercept))]

    public class AufacClass1
    {
        /// <summary>
        /// 必须是virtual
        /// </summary>
        /// <returns></returns>
        public virtual string GetName()
        {
            Debug.WriteLine("this is getname");
            return "this is getname";
        }
    }
}

4.1.2配置startup 注入到服务

        //autofac 新增
        public void ConfigureContainer(ContainerBuilder builder)
        {

builder.RegisterType<WebApplication1.Aufac.AufacClass2>().EnableClassInterceptors();
builder.Register(c => new WebApplication1.Aufac.CacheIntercept());



}

4.1.3在代码里调用 发现已经进行了拦截处理

调用代码如下

WebApplication1.Aufac.AufacClass2 face2;
public WeatherForecastController(WebApplication1.Aufac.AufacClass2 interFace1
)
{
face2 = interFace2;
}
[HttpGet]
//[Caching(AbsoluteExpiration =2,keyname ="id",keyvaluename ="id")]
public  string Get()
{
face2.GetName();
return DateTime.Now.ToString();
}