Auto.Core

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 选项配置;缓存;参数校验;服务注册

Auto Core (基于AspectCore)

logo.png

介绍

Auto.Core是基于 .Net Standard 2.1用于简化 ASP.NET Core开发,Auto.CoreAspectCore 的基础上进行功能开发,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 |

快速开始

  1. 安装
Install-Package Auto.Core
dotnet add package Auto.Core
  1. 配置 ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
  1. 注册AutoCore
builder.Services.AddAutoCore(builder.Configuration);
  1. 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;
}
  1. 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;
}
  1. 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;
}
  1. 参数校验
//参数校验:参数标记校验方法
public WeatherForecast([NotNull] string userName)
{
   
  string  un = userName;
}

AutoCache(缓存)

  1. redis缓存提供
Install-Package Auto.Core.Redis
  1. 注册
builder.Services.AddAutoRedis();
  1. appsettings.json
{
   
  "RedisOptions": {
   
    "Host": "127.0.0.1",
    "Port": 6379,
    "Database": 0
  }
}

AutoValidation(参数校验)

  1. 字符串最大长度 [MaxLengthAttribute]

  2. 字符串最小长度 [MinLengthAttribute]

  3. 字符串不能为空或Null [NotNullOrEmptyAttribute]

  4. 字符串不能为Null或空格 [NotNullOrWhiteSpaceAttribute]

  5. 对象不能为Null [NotNullAttribute]

  6. 范围 [RangeAttribute]

常见问题

功能无法正常使用

  1. 检查方法设置为 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();
  1. 检查是否注册AutoCore
builder.Services.AddAutoCore(builder.Configuration);
  1. 检查是否配置ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
存储 Cloud Native Linux
C++11 auto限制
C++11 auto限制
|
1月前
|
Java Maven Spring
Creating Your Own Auto-configuration
SpringBoot的自动配置和其工作原理,自定义Starter
35 1
|
4月前
|
编译器 C++ 容器
在 C++ 中 auto什么意思
在 C++ 中 auto什么意思
|
6月前
|
安全
qt.qpa.xcb: could not connect to display 问题解决
【5月更文挑战第16天】qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 问题解决
3201 0
|
11月前
|
C++ 容器
C++中的auto
C++中的auto
|
编译器 C++
C++入门(4):auto,范围for,nullptr
C++入门(4):auto,范围for,nullptr
Error starting ApplicationContext. To display the auto-configuration report re-run your application
Error starting ApplicationContext. To display the auto-configuration report re-run your application
|
编译器 C++
C++ auto用法
1.auto作用 auto关键字能够自动识别变量类型。 2. auto的原理 auto定义的变量会在编译阶段根据右值来推出auto变量的类型。 1.使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。 2.因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。 3.使用auto的细则 3.1. auto与指针和引用结合起来使用
|
JavaScript 前端开发 中间件
在 vite 中基于 node 实现 simple-auto-import 插件
在 vite 中基于 node 实现 simple-auto-import 插件
272 0
|
移动开发 数据库
Auto Mapper02《demo》
Auto Mapper02《demo》
140 0
Auto Mapper02《demo》