Auto.Core
Auto Core (基于AspectCore)

介绍
AutoCore是基于 .Net Standard 2.1用于简化 ASP.NET Core开发,AutoCore 在 AspectCore 的基础上进行功能开发,AspectCore 在性能上都比反射有2个数量级的优化,达到了和硬编码调用相同的数量级。
AspectCore 方法调用反射扩展
性能测试:(Reflection为.NET Core提供的反射调用,Reflector为AspectCore.Extension.Reflection调用,Native为硬编码调用
| Method | Mean | Error | StdDev | StdErr | Op/s |
|------------------- |------------:|----------:|----------:|----------:|----------------:|
| Native_Call | 1.0473 ns | 0.0064 ns | 0.0050 ns | 0.0015 ns | 954,874,046.8 |
| Reflection_Call | 91.9543 ns | 0.3540 ns | 0.3311 ns | 0.0855 ns | 10,874,961.4 |
| Reflector_Call | 7.1544 ns | 0.0628 ns | 0.0587 ns | 0.0152 ns | 139,774,408.3 |
快速开始
- 安装
Install-Package Auto.Core
dotnet add package Auto.Core
- 配置 ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
- 注册AutoCore
builder.Services.AddAutoCore(builder.Configuration);
- AutoOptions (选项)
//appsettings.json
{
"Redis": {
"Host": "localhost",
"Port": 6379,
"Password": "zxc123..."
}
}
//选项类:标记绑定
[AutoOptions(Node ="Redis")]
public class Redis
{
public string Host { get; set; }
public int Port { get; set; }
public string Password { get; set; }
}
//构造函数注入
private readonly Redis _redis;
public WeatherForecast(IOptionsSnapshot<Redis> options)
{
_redis = options.Value;
}
- AutoCache (缓存)
//方法:标记缓存
[AutoCache]
public virtual async Task<IEnumerable<WeatherForecast>> Get(User user)
{
var ss = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
}).ToArray();
return ss;
}
- AutoService(服务注册)
//接口
public interface IUser
{
void Get();
}
//实现:标记注册
[AutoService]
public class User : IUser
{
public void Get()
{
Console.WriteLine(1);
}
}
//构造函数注入
private readonly IUser _user;
public WeatherForecastController(IUser user)
{
_user = user;
}
- 参数校验
//参数校验:参数标记校验方法
public WeatherForecast([NotNull] string userName)
{
string un = userName;
}
AutoCache(缓存)
- redis缓存提供
Install-Package Auto.Core.Redis
- 注册
builder.Services.AddAutoRedis();
- appsettings.json
{
"RedisOptions": {
"Host": "127.0.0.1",
"Port": 6379,
"Database": 0
}
}
AutoValidation(参数校验)
字符串最大长度 [MaxLengthAttribute]
字符串最小长度 [MinLengthAttribute]
字符串不能为空或Null [NotNullOrEmptyAttribute]
字符串不能为Null或空格 [NotNullOrWhiteSpaceAttribute]
对象不能为Null [NotNullAttribute]
范围 [RangeAttribute]
常见问题
功能无法正常使用
- 检查方法设置为 virtual
[HttpPost(Name = "GetWeatherForecast")]
[AutoCache]
public virtual async Task<IEnumerable<WeatherForecast>> Get(User user)
{
var ss = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
}).ToArray();
return ss;
}
}
注意:控制器中的方法需要注册为服务后才可以使用
builder.Services.AddControllers().AddControllersAsServices();
- 检查是否注册AutoCore
builder.Services.AddAutoCore(builder.Configuration);
- 检查是否配置ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
Auto.Core的更多相关文章
- .net core 2.0部署到CentOS7系统
1.Nginx的安装(重启Nginx命令: systemctl restart nginx) 输入命令( 根据提示输入Y 即可): sudo yum install epel-release sudo ...
- H5图片上传插件
基于zepto,支持多文件上传,进度和图片预览,用于手机端. (function ($) { $.extend($, { fileUpload: function (options) { var pa ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
- Git全解析之用起来先
文章目录 1. Git全解析之用起来先 1.1. 先安装Git环境 1.2. 配置 1.3. 简单了解Git 1.3.1. Git对象模型 SHA 1.3.2. Git目录与工作目录 1.4. 可以开 ...
- [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)
引言 为什么要自己重新造轮子,而不是采用第三方的JsonSchema方法进行实现存在以下痛点:1.我之前在网上找了很久,没有找到java版直接进行jsonschema生成的方法或直接比较的方法2.ht ...
- Git的常见基础操作命令
Git的常见基础操作命令 1安装初始化 1.1安装git本地安装Windows版本 下载地址: https://git-scm.com/downloads/ 1.2初始化Git用户信息配置 配置git ...
- 这些git命令判断提交到哪个分支哪个项目上
git branch -r fuweikun@pengfei:~/e1_cp/AMSS$ git branch* 8939-E1-2104026-dev git config -l fuweikun@ ...
- Git 环境设置(安装)
在使用Git之前,必须安装它,并做一些基本配置的变化.下面是步骤在Ubuntu和CentOS Linux安装 Git 客户端. Git客户端安装 如果使用的是GNU/ Linux 发行版Debian基 ...
- 使用git快捷方便的保存代码
大家都在使用git保存和备份代码,下面我们就来学习下吧. 一.本地安装和配置git 1.安装git pacman -S git //如果没有问题的话就可以安装成功了 2.验证 git --versio ...
- GIT+Gitolite+Gerrit 环境搭建 ***
系统环境:Ubuntu12.04 服务器上安装git+gitolite+gitweb root@server: 为搭建git服务器终端,假设ID为 192.168.199.117 或域名为: http ...
随机推荐
- vue自定义组件——split-pane
pre { overflow-y: auto; max-height: 500px } github地址: https://github.com/lxmghct/my-vue-components 组 ...
- GPT-4:思考的曙光还是数据的缩影?
海盗分金,GPT-4初露锋芒 GPT系列模型横空出世后,其是否真实具有思考和推理的能力一直被业界关注.GPT-3.5在多条狗问题和海盗分金问题上表现糟糕.GPT-4在这两个谜题上给出的答案令人惊喜,甚 ...
- php正则表达式大全/php正则表达式使用方法整理集合
匹配数字 "^\d+$" //非负整数(正整数 + 0) "[1][1-9][0-9]$" //正整数 "^((-\d+)|(0+))$" ...
- CRC(Cyclic Redundancy Check)
CRC(循环冗余校验) [参考资料] https://en.wikipedia.org/wiki/Cyclic_redundancy_check https://wiki.segger.com/CRC ...
- Java 的 SPI 机制
什么是SPI机制? SPI机制( Service Provider Interface)是Java的一种服务发现机制,为了方便应用扩展.那什么是服务发现机制?简单来说,就是你定义了一个接口,但是不提供 ...
- java LocalDateTime的使用
1.LocalDateTime的基本使用 //获取当前时间 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println( ...
- Django笔记三十一之全局异常处理
本文首发于公众号:Hunter后端 原文链接:Django笔记三十一之全局异常处理 这一篇笔记介绍 Django 的全局异常处理. 当我们在处理一个 request 请求时,会尽可能的对接口数据的格式 ...
- [Pytorch框架] 1.5 Neural Networks
文章目录 Neural Networks 定义网络 损失函数 反向传播 更新权重 Neural Networks 使用torch.nn包来构建神经网络. 上一讲已经讲过了autograd,nn包依赖a ...
- AppScan-使用入门
一.介绍 AppScan是IBM公司出的一款Web应用安全测试工具,采用黑盒测试的方式,可以扫描常见的web应用安全漏洞 工作原理 首先是根据起始页爬取站下所有可见的页面,同时测试常见的管理后台 获得 ...
- 2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写。
2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写. 答案2023-03-27: 这段代码实现了通 ...