翼度科技»论坛 编程开发 .net 查看内容

Auto.Core

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
Auto.Core   (基于AspectCore)


介绍

Auto.Core是基于 .Net Standard 2.1用于简化 ASP.NET Core开发,Auto.CoreAspectCore 的基础上进行功能开发,AspectCore 在性能上都比反射有2个数量级的优化,达到了和硬编码调用相同的数量级。
AspectCore 方法调用反射扩展
性能测试:(Reflection为.NET Core提供的反射调用,Reflector为AspectCore.Extension.Reflection调用,Native为硬编码调用
  1. |             Method |        Mean |     Error |    StdDev |    StdErr |            Op/s |
  2. |------------------- |------------:|----------:|----------:|----------:|----------------:|
  3. |        Native_Call |   1.0473 ns | 0.0064 ns | 0.0050 ns | 0.0015 ns |   954,874,046.8 |
  4. |    Reflection_Call |  91.9543 ns | 0.3540 ns | 0.3311 ns | 0.0855 ns |    10,874,961.4 |
  5. |     Reflector_Call |   7.1544 ns | 0.0628 ns | 0.0587 ns | 0.0152 ns |   139,774,408.3 |
复制代码
快速开始


  • 安装

  1. Install-Package Auto.Core
复制代码
  1. dotnet add package Auto.Core
复制代码

  • 配置 ServiceProviderFactory
  1. builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
复制代码

  • 注册AutoCore
  1. builder.Services.AddAutoCore(builder.Configuration);
复制代码

  • AutoOptions (选项)
  1. //appsettings.json
  2. {
  3.   "Redis": {
  4.     "Host": "localhost",
  5.     "Port": 6379,
  6.     "Password": "zxc123..."
  7.   }
  8. }
  9. //选项类:标记绑定
  10. [AutoOptions(Node ="Redis")]
  11. public class Redis
  12. {
  13.     public string Host { get; set; }
  14.     public int Port { get; set; }
  15.     public string Password { get; set; }
  16. }
  17. //构造函数注入
  18. private readonly Redis _redis;
  19. public WeatherForecast(IOptionsSnapshot<Redis> options)
  20. {
  21.      _redis = options.Value;
  22. }
复制代码

  • AutoCache (缓存)
  1. //方法:标记缓存
  2. [AutoCache]
  3. public virtual async Task<IEnumerable<WeatherForecast>> Get(User user)
  4. {
  5.     var ss = Enumerable.Range(1, 5).Select(index => new WeatherForecast
  6.     {
  7.         Date = DateTime.Now.AddDays(index),
  8.         TemperatureC = Random.Shared.Next(-20, 55),
  9.         Summary = Summaries[Random.Shared.Next(Summaries.Length)]
  10.     }).ToArray();
  11.     return ss;
  12. }
复制代码

  • AutoService(服务注册)
  1. //接口
  2. public interface IUser
  3. {
  4.     void Get();
  5. }
  6. //实现:标记注册
  7. [AutoService]
  8. public class User : IUser
  9. {
  10.     public void Get()
  11.     {
  12.         Console.WriteLine(1);
  13.     }
  14. }
  15. //构造函数注入
  16. private readonly IUser _user;
  17. public WeatherForecastController(IUser user)
  18. {
  19.     _user = user;
  20. }
复制代码

  • 参数校验
  1. //参数校验:参数标记校验方法
  2. public WeatherForecast([NotNull] string userName)
  3. {
  4.   string  un = userName;
  5. }
复制代码
AutoCache(缓存)


  • redis缓存提供
  1. Install-Package Auto.Core.Redis
复制代码

  • 注册
  1. builder.Services.AddAutoRedis();
复制代码

  • appsettings.json
  1. {
  2.   "RedisOptions": {
  3.     "Host": "127.0.0.1",
  4.     "Port": 6379,
  5.     "Database": 0
  6.   }
  7. }
复制代码
AutoValidation(参数校验)


  • 字符串最大长度        [MaxLengthAttribute]
  • 字符串最小长度    [MinLengthAttribute]
  • 字符串不能为空或Null    [NotNullOrEmptyAttribute]
  • 字符串不能为Null或空格    [NotNullOrWhiteSpaceAttribute]
  • 对象不能为Null    [NotNullAttribute]
  • 范围    [RangeAttribute]
常见问题

功能无法正常使用

  • 检查方法设置为 virtual
  1. [HttpPost(Name = "GetWeatherForecast")]
  2. [AutoCache]
  3. public virtual async Task<IEnumerable<WeatherForecast>> Get(User user)
  4. {
  5.     var ss = Enumerable.Range(1, 5).Select(index => new WeatherForecast
  6.     {
  7.                     Date = DateTime.Now.AddDays(index),
  8.                     TemperatureC = Random.Shared.Next(-20, 55),
  9.                     Summary = Summaries[Random.Shared.Next(Summaries.Length)]
  10.         }).ToArray();
  11.        return ss;
  12.     }
  13. }
复制代码
注意:控制器中的方法需要注册为服务后才可以使用
  1. builder.Services.AddControllers().AddControllersAsServices();
复制代码

  • 检查是否注册AutoCore
  1. builder.Services.AddAutoCore(builder.Configuration);
复制代码

  • 检查是否配置ServiceProviderFactory
  1. builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
复制代码
来源:https://www.cnblogs.com/xianchengzhang/archive/2023/07/13/17551390.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具