Application.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using Autofac;
  2. using Autofac.Extensions.DependencyInjection;
  3. using Microsoft.AspNetCore.Builder;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Microsoft.Extensions.Hosting;
  7. using ERP.Framework.Config;
  8. using ERP.Framework.Constants;
  9. using ERP.Framework.Extensions;
  10. using ERP.Framework.Filter;
  11. using Newtonsoft.Json;
  12. namespace ERP.Core
  13. {
  14. public static class Application
  15. {
  16. /// <summary>
  17. /// 初始化模块项目
  18. /// </summary>
  19. /// <param name="builder"></param>
  20. /// <param name="serviceInfo"></param>
  21. /// <returns></returns>
  22. public static WebApplicationBuilder InitApplication(this WebApplicationBuilder builder)
  23. {
  24. // 获取配置项
  25. var redisConfig = builder.Configuration.GetSection(FrameworkConstant.Redis).Get<RedisConfig>();
  26. //var dbConfig = builder.Configuration.GetSection(FrameworkConstant.DBConfig).Get<DBConfig>();
  27. // 处理Id生成配置
  28. builder.Configuration.InitIdGenerater();
  29. // DI
  30. builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
  31. builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
  32. {
  33. builder.InitAutofac();
  34. });
  35. // 缓存注册
  36. builder.Services.AddCache(redisConfig);
  37. // EntityFrameworkCore
  38. builder.Services.AddEntityFrameworkMySql();
  39. // 跨域
  40. builder.Services.AddCorsAccessor();
  41. // Todo 任务队列
  42. // Todo 任务调度
  43. // Todo 添加MiniProfiler 性能分析
  44. // Swagger
  45. builder.Services.AddSwaggerGen();
  46. //builder.Services.AddSwagger();
  47. // 校验异常拦截
  48. // 全局异常拦截
  49. // Json序列化
  50. builder.Services
  51. .AddControllers(options =>
  52. {
  53. options.Filters.Add(new GlobalActionFilter());
  54. options.Filters.Add(new GlobalExceptionFilter());
  55. })
  56. .AddNewtonsoftJson(options =>
  57. {
  58. options.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
  59. options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
  60. options.SerializerSettings.DateFormatString = DateTimeConstant.Date_Long;
  61. options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //忽略循环引用
  62. //options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //动态对象属性名大写
  63. //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; // 忽略空值
  64. //options.SerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; // DateTimeOffset 异常
  65. });
  66. // 国际化处理
  67. builder.Services.AddLocalization();
  68. // Todo 事务总线 Redis消息队列 RabbitMQ 消息队列
  69. //builder.Services.AddEventBus()
  70. // Todo AddLog() 日志
  71. // 可添加 AddOauth2() 第三方授权或SSO
  72. // AddElasticSerch() 配置ElasticSearc
  73. // AddRateLimiting 限流
  74. return builder;
  75. }
  76. public static void InitConfigure(this IApplicationBuilder app)
  77. {
  78. //app.HandleAuthentication();
  79. app.UseHttpsRedirection();
  80. //app.UseI18N();
  81. app.UseSwagger();
  82. app.UseSwaggerUI();
  83. app.UseRouting();
  84. app.UseEndpoints(endpoints =>
  85. {
  86. // endpoints.MapMetrics();
  87. endpoints.MapControllers();
  88. //endpoints.MapHealthChecks("/health");
  89. });
  90. }
  91. }
  92. }