[Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍
AspectCore Project 介绍
什么是AspectCore Project ?
AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect-oriented programming) 解决方案,它更好的遵循Asp.Net Core的模块化开发理念,使用AspectCore可以更容易构建低耦合、易扩展的Web应用程序。
为什么要设计AspectCore ?
在传统.Net Framework和Asp.Net Framework中,我们使用Castle DynamicProxy 或者CLR提供的 Remoting.Proxies 可以轻松的实现 Aop 来分离关注点从而降低业务逻辑和基础框架功能的耦合。然而在Asp.Net Core中,不仅缺乏细粒度的Aop支持(Middleware和Filter都是Asp.Net Core的内置Aop实现,但仅适合在Web层使用),Castle也迟迟未能友好的支持Asp.Net Core。
因此 AspectCore 提供了一个全新的轻量级和模块化的Aop解决方案,下面是AspectCore的基本特性:
- 提供抽象的Aop接口,基于该接口,可以轻松的使用自己的代理类实现替换默认的实现
- 框架不包含IoC,也不依赖具体的IoC实现,可以使用Asp.Net Core的内置依赖注入或任何兼容 Asp.Net Core的第三方IoC来集成 AspectCore 到 Asp.Net Core 应用程序中
- 高性能的异步拦截器系统
- 灵活的配置系统
- 基于
Service的而非基于实现类的切面构造 - 支持跨平台的Asp.Net Core环境
AspectCore Project 架构设计

从上图可以看出,AspectCore Abstractions 是AspectCore Project的核心,向下通过IoC来集成到Asp.Net Core应用程序中,向上提供配置系统,动态代理系统,模型验证系统以及更多的扩展系统。
目前已完成的组件包括:
- AspectCore.Lite.Abstractions 提供Aop的抽象接口
- AspectCore.Lite.Abstractions.Resolution 默认的Aop实现
- AspectCore.Lite.Container.DependencyInjection AspectCore的DependencyInjection支持
- AspectCore.Lite.Container.Autofac AspectCore的Autofac支持
在Asp.Net Core应用程序中开始使用AspectCore
- 启动 Visual Studio。从 File 菜单, 选择 New > Project。选择 ASP.NET Core Web Application 项目模版,创建新的 ASP.NET Core Web Application 项目。
从 Nuget 安装 AspectCore.Lite.Container.DependencyInjection package:
PM> Install-Package AspectCore.Lite.Container.DependencyInjection -Pre在拦截器系统中,AspectCore定义了
IInterceptor接口,它声明了一个返回值为Task的异步执行方法:namespace AspectCore.Lite.Abstractions { public interface IInterceptor { Task Invoke(IAspectContext context, AspectDelegate next); } }然而在一般情况下可以使用另一个抽象的
InterceptorAttribute自定义特性类,它实现IInterceptor接口。AspectCore默认实现了基于Attribute的拦截器配置。我们的自定义拦截器看起来像下面这样:public class CustomInterceptorAttribute : InterceptorAttribute { public async override Task Invoke(IAspectContext context, AspectDelegate next) { try { Console.WriteLine("Before service call"); await next(context); } catch (Exception) { Console.WriteLine("Service threw an exception!"); throw; } finally { Console.WriteLine("After service call"); } } }定义
ICustomService接口和它的实现类CustomService:public interface ICustomService { [CustomInterceptor] void Call(); } public class CustomService : ICustomService { public void Call() { Console.WriteLine("service calling..."); } }在
HomeController中注入ICustomService:public class HomeController : Controller { private readonly ICustomService _service; public HomeController(ICustomService service) { _service = service; } public IActionResult Index() { _service.Call(); return View(); } }注册
ICustomService,接着,在ConfigureServices中配置创建代理类型的容器:public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddTransient<ICustomService, CustomService>(); services.AddMvc(); return new AspectCoreServiceProviderFactory().CreateServiceProvider(services); }有问题反馈
如果您有任何问题,请提交 Issue 给我们。
AspectCore Project 项目地址: https://github.com/aspectcore
AspectCore Project 文档地址: https://docs.aspectcore.org(文档在持续更新中..)
[Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍的更多相关文章
- Asp.Net Core轻量级Aop解决方案:AspectCore
什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect-oriented programming) ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- asp.net core的AOP记录
序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效.还有要记得敲完代码然后写一篇随笔来记录一下你所学所想. 什么叫AOP? AOP面向切面 ...
- 一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目
这是一个基于最新的ASP.net core 5.0创建Razor Page应用程序解决方案模板.遵循Clean Architecture的原则,以最求简洁的代码风格和实现快速开发小型的web业务系统的 ...
- 打造静态分析器(二)基于Asp.Net Core 3.0的AspectCore组件检测
上一篇,我们打造了一个简单的分析器,但是我们实际使用分析器就是为了对项目做分析检测,增加一些非语法的自检的 比如Asp.Net Core 3.0的替换依赖注入检测 设计分析 我们创建一个默认的Asp. ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core系列 39 Web 应用Razor 介绍与详细示例
一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...
- asp.net core 系列 2 启动Startup类介绍
一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...
- 菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. ...
随机推荐
- rebar
www.cnblogs.com/panfeng412/archive/2011/08/14/2137990.html
- java memcache应用
import java.io.Serializable; import java.text.DateFormat; import java.util.Date; import java.util.Ma ...
- sed用法小结
简介: sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区 ...
- Webkit之资源加载
一.webkit资源分类 webkit中有多种资源,大致分为以下几种: HTML文本 CSS样式文本 - CachedCSSStyleSheet 字体 - CachedFont 图片 - Cached ...
- ABI & API
API defines the programning language and function entry point, arguments type, order. ABI defines th ...
- 解决TortoiseGit 推送 拉取需要密码的问题
找到解决了方法: 1)运行PuTTYGen,在Conversions菜单中点击Import key,选择ssh-keygen生成的私钥文件所在位置,比如id_rsa文件. 2)点击Save priva ...
- UUID 浅析
在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”. ...
- ImageLoader的Jar包加载图片
注意:需要添加权限,若缓存图片第二个必须要加 <uses-permission android:name="android.permission.INTERNET" /> ...
- synchronized关键字以及实例锁 类锁
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- ubuntu 下重装mysql若干问题
最近由于种种原因需要重装mysql.打开终端开始卸载 sudo apt-get remove mysql-comm sudo apt-get auto remove 重新开始安装mysql sudo ...