序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效。还有要记得敲完代码然后写一篇随笔来记录一下你所学所想。

什么叫AOP?

AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

运用场景?

比较常见的场景是:日志记录,错误捕获、性能监控等 AOP的本质是通过代理对象来间接执行真实对象,在代理类中往往会添加装饰一些额外的业务代码。

下面通过代码来说明一下,本文举例比较简单的案例来说明,若有错误,多谢指点。

建立一个asp.net core的控制台程序来演示

利用Nuget引入相关的包文件

如图所示:

第一个拦截器的引用包 AspectCore.Extensions.DependencyInjection

第二个是依赖注入的包 Microsoft.Extensions.DependencyInjection

创建一个接口:

using System;
using System.Collections.Generic;
using System.Text; namespace AOP_Demo
{
public interface IMysql
{
void Select(int i);
}
}

创建一个实现类

using System.Collections.Generic;
using System.Text; namespace AOP_Demo
{
class Mysql : IMysql
{
[MyLogInterceptor]
public void Select(int i)
{
Console.WriteLine("查询的结果是:"+i);
}
}
}

创建一个日志拦截器

using AspectCore.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks; namespace AOP_Demo
{
public class MyLogInterceptorAttribute : AbstractInterceptorAttribute
{
public override Task Invoke(AspectContext context, AspectDelegate next)
{
Console.WriteLine("方法执行前的日志");
var task = next(context);
Console.WriteLine("方法执行后的日志");
return task;
}
}
}

然后在程序入口处编写相关代码

using Microsoft.Extensions.DependencyInjection;
using System;
using AspectCore.Extensions.DependencyInjection;
using AspectCore.Configuration; namespace AOP_Demo
{
class Program
{
static void Main(string[] args)
{
ServiceCollection serviceDescriptors = new ServiceCollection();
//配置动态代理
serviceDescriptors.ConfigureDynamicProxy(config => {
config.Interceptors.AddTyped<MyLogInterceptorAttribute>();
});
//注册服务
serviceDescriptors.AddTransient<IMysql, Mysql>();
//提供者
IServiceProvider serviceProvider = serviceDescriptors.BuildDynamicProxyServiceProvider();
//获得服务
var Provider= serviceProvider.GetService<IMysql>();
//调用方法
Provider.Select();
Console.ReadKey();
}
} }

上面代码中,我们需要把拦截器通过动态代理的方式注入到IOC容器中。

所思:面向切面就是在原来的服务上添加一点新的功能,而且这个添加的功能还不能对原来的代码进行大改特改,尽可能的降低新功能和原来功能的耦合性,我觉得可以很好的运用在日志,异常处理等方面。

asp.net core的AOP记录的更多相关文章

  1. ASP.NET Core使用Elasticsearch记录NLog日志

    ASP.NET Core使用Elasticsearch记录NLog日志 1.新建一个 ASP.NET Core项目 2.安装Nuge包 运行:Install-Package NLog.Web.AspN ...

  2. [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍

    AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...

  3. Asp.Net Core轻量级Aop解决方案:AspectCore

    什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect-oriented programming) ...

  4. ASP.NET Core学习零散记录

    赶着潮流听着歌,学着.net玩着Core 竹子学Core,目前主要看老A(http://www.cnblogs.com/artech/)和tom大叔的博客(http://www.cnblogs.com ...

  5. ASP.NET CORE Docker发布记录

    1.安装Docker yum install curl -y curl -fsSL https://get.docker.com/ | sh 2.编写Dockerfile文件 FROM microso ...

  6. ASP.NET Core使用NLog记录日志到Microsoft Sql Server

    在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server 1.我们需要添加依赖: NLog.We ...

  7. 如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

    这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore. 第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输 ...

  8. ASP.NET Core管道详解[3]: Pipeline = IServer + IHttpApplication

    ASP.NET Core的请求处理管道由一个服务器和一组中间件构成,但对于面向传输层的服务器来说,它其实没有中间件的概念.当服务器接收到请求之后,会将该请求分发给一个处理器进行处理,对服务器而言,这个 ...

  9. ASP.NET Core 6框架揭秘实例演示[26]:跟踪应用接收的每一次请求

    很多人可能对ASP.NET Core框架自身记录的诊断日志并不关心,其实这些日志对纠错排错和性能监控提供了很有用的信息.如果需要创建一个APM(Application Performance Mana ...

随机推荐

  1. 基于Quartz.NET框架的任务计划管理工具

    最近接到一个小需求 ——可以定期同步20个Sql Server 7.0数据库里的数据(数据量会预计>10000),并保存为CSV格式文件 ——可以设置保存文件数据量 ——该应用需要用WinFor ...

  2. tp5实现支付宝电脑支付(详解)

    首先吐槽一下支付宝的官方文档,它只是简单介绍一下开发的流程和参数,而对于新人来说如果只看它的官方文档很多时候是看不懂的,我也是边看文档边网上查资料才把它弄懂.下面我详细介绍支付宝的电脑支付是如何实现 ...

  3. vars()

    返回一个字典,包含所有在本函数调用时存在的变量

  4. ubuntu 下 shell 搜索命令

    一.在当前目录及其子目录查找以mesos开头,并以.jar结尾的文件,并打印出来 sudo find ./ -name mesos*.jar -print 二.whereis, locate 也有类似 ...

  5. Spring MVC上传文件原理和resolveLazily说明

    问题:使用Spring MVC上传大文件,发现从页面提交,到进入后台controller,时间很长.怀疑是文件上传完成后,才进入.由于在HTTP首部自定义了“Token”字段用于权限校验,Token的 ...

  6. [TimLinux] asciinema Linux终端录制工具嵌入私有web中

    yum install asciinema https://github.com/asciinema/asciinema-player # 下载asciinema-player.css, asciin ...

  7. [TimLinux] Python如何运行程序

    1. Python解释器安装 访问官方网站:https://www.python.org/, 在首页标签中找到“Downloads”,根据不同的操作系统,选择相应的下载源文件即可. 2. 源码安装 在 ...

  8. C语言之推箱子游戏代码

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Yan_Less 正文 新手注意:如果你学习遇到问题找不到人解答,可以点 ...

  9. CSS修饰文档

    定义字体类型 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...

  10. Python3 类与对象

    目录 面向对象基础 面向过程编程 面向对象编程 类 什么是类 如何定义类 类的基本操作 对象 实例化对象 对象添加特有属性 对象与类的查找顺序 对象的绑定方法 面向对象基础 面向过程编程 面向过程的核 ...