ToB企服应用市场:ToB评测及商务社交产业平台

标题: Auto.Core [打印本页]

作者: 惊落一身雪    时间: 2023-7-13 17:54
标题: Auto.Core
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
复制代码
  1. builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
复制代码
  1. builder.Services.AddAutoCore(builder.Configuration);
复制代码
  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. }
复制代码
  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. }
复制代码
  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(缓存)

  1. Install-Package Auto.Core.Redis
复制代码
  1. builder.Services.AddAutoRedis();
复制代码
  1. {
  2.   "RedisOptions": {
  3.     "Host": "127.0.0.1",
  4.     "Port": 6379,
  5.     "Database": 0
  6.   }
  7. }
复制代码
AutoValidation(参数校验)

常见问题

功能无法正常使用
  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();
复制代码
  1. builder.Services.AddAutoCore(builder.Configuration);
复制代码
  1. builder.Host.UseServiceProviderFactory(new AutoServiceProviderFactory());
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4