浏览代码

精简代码

懒得勤快 3 年之前
父节点
当前提交
3bd8374e35

+ 0 - 28
src/Masuit.MyBlogs.Core/Common/HangfireHelper.cs

@@ -1,28 +0,0 @@
-using Hangfire;
-using Hangfire.Common;
-using Hangfire.States;
-
-namespace Masuit.MyBlogs.Core.Common
-{
-    /// <summary>
-    /// HangfireHelper
-    /// </summary>
-    public static class HangfireHelper
-    {
-        private static BackgroundJobClient Client { get; } = new BackgroundJobClient();
-
-        /// <summary>
-        /// 创建任务
-        /// </summary>
-        /// <param name="type">任务类</param>
-        /// <param name="method">调用方法</param>
-        /// <param name="queue">队列名</param>
-        /// <param name="args">调用参数</param>
-        /// <returns></returns>
-        public static string CreateJob(Type type, string method, string queue = "", params dynamic[] args)
-        {
-            var job = new Job(type, type.GetMethod(method), args);
-            return string.IsNullOrEmpty(queue) ? Client.Create(job, new EnqueuedState()) : Client.Create(job, new EnqueuedState(queue));
-        }
-    }
-}

+ 0 - 65
src/Masuit.MyBlogs.Core/Configs/HangfireJobInit.cs

@@ -1,65 +0,0 @@
-using Hangfire;
-using Masuit.MyBlogs.Core.Common;
-using Masuit.MyBlogs.Core.Extensions.Hangfire;
-
-namespace Masuit.MyBlogs.Core.Configs
-{
-    /// <summary>
-    /// hangfire配置
-    /// </summary>
-    public static class HangfireJobInit
-    {
-        /// <summary>
-        /// hangfire初始化
-        /// </summary>
-        public static void Start()
-        {
-            RecurringJob.AddOrUpdate(() => CheckLinks(), "0 */5 * * *"); //每5h检查友链
-            RecurringJob.AddOrUpdate(() => EverydayJob(), Cron.Daily(5), TimeZoneInfo.Local); //每天的任务
-            RecurringJob.AddOrUpdate(() => EveryweekJob(), Cron.Weekly(DayOfWeek.Monday, 5), TimeZoneInfo.Local); //每周的任务
-            RecurringJob.AddOrUpdate(() => EverymonthJob(), Cron.Monthly(1, 0, 0), TimeZoneInfo.Local); //每月的任务
-            RecurringJob.AddOrUpdate(() => EveryHourJob(), Cron.Hourly); //每小时的任务
-            BackgroundJob.Enqueue(() => HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.StatisticsSearchKeywords), "default"));
-        }
-
-        /// <summary>
-        /// 检查友链
-        /// </summary>
-        public static void CheckLinks()
-        {
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.CheckLinks), "default");
-        }
-
-        /// <summary>
-        /// 每日任务
-        /// </summary>
-        public static void EverydayJob()
-        {
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.EverydayJob), "default");
-        }
-
-        /// <summary>
-        /// 每日任务
-        /// </summary>
-        public static void EverymonthJob()
-        {
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.EverymonthJob), "default");
-        }
-
-        /// <summary>
-        /// 每小时任务
-        /// </summary>
-        public static void EveryHourJob()
-        {
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.StatisticsSearchKeywords), "default");
-        }
-
-        /// <summary>
-        /// 每周任务
-        /// </summary>
-        public static void EveryweekJob()
-        {
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.CreateLuceneIndex), "default");
-        }
-    }
-}

+ 1 - 1
src/Masuit.MyBlogs.Core/Configs/MappingProfile.cs

@@ -33,7 +33,7 @@ namespace Masuit.MyBlogs.Core.Configs
             CreateMap<Links, LinksDto>().ForMember(e => e.Loopbacks, e => e.MapFrom(m => m.Loopbacks.Count)).ReverseMap();
 
             CreateMap<MenuCommand, Menu>().ForMember(m => m.ParentId, e => e.MapFrom(c => (c.ParentId ?? 0) == 0 ? null : c.ParentId)).ReverseMap();
-            CreateMap<Menu, MenuDto>().ForMember(m => m.Children, e => e.MapFrom(m => m.Children.OrderBy(c => c.Sort))).ReverseMap();
+            CreateMap<Menu, MenuDto>().ForMember(m => m.Children, e => e.MapFrom(m => m.Children.OrderBy(c => c.Sort).ToList())).ReverseMap();
 
             CreateMap<Misc, MiscCommand>().ReverseMap();
             CreateMap<Misc, MiscDto>().ReverseMap();

+ 5 - 3
src/Masuit.MyBlogs.Core/Controllers/Drive/UserController.cs

@@ -1,4 +1,5 @@
-using Masuit.MyBlogs.Core.Common;
+using Hangfire;
+using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Configs;
 using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
@@ -47,7 +48,7 @@ namespace Masuit.MyBlogs.Core.Controllers.Drive
                 SameSite = SameSiteMode.Lax
             });
             HttpContext.Session.Set(SessionKey.UserInfo, user);
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.LoginRecord), "default", user, HttpContext.Connection.RemoteIpAddress.ToString(), LoginType.Default);
+            BackgroundJob.Enqueue<IHangfireBackJob>(job => job.LoginRecord(user, HttpContext.Connection.RemoteIpAddress.ToString(), LoginType.Default));
             return Ok(new
             {
                 error = false,
@@ -57,10 +58,11 @@ namespace Masuit.MyBlogs.Core.Controllers.Drive
             });
         }
     }
+
     public class AuthenticateModel
     {
         public string Username { get; set; }
 
         public string Password { get; set; }
     }
-}
+}

+ 6 - 4
src/Masuit.MyBlogs.Core/Controllers/PassportController.cs

@@ -17,6 +17,7 @@ using Masuit.Tools.Strings;
 using Microsoft.AspNetCore.Mvc;
 using System.Net;
 using System.Web;
+using Hangfire;
 
 namespace Masuit.MyBlogs.Core.Controllers
 {
@@ -39,7 +40,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         public string ClientIP => HttpContext.Connection.RemoteIpAddress.ToString();
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         /// <param name="data"></param>
         /// <param name="isTrue"></param>
@@ -105,7 +106,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                         SameSite = SameSiteMode.Lax
                     });
                     HttpContext.Session.Set(SessionKey.UserInfo, userInfo);
-                    HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.LoginRecord), "default", userInfo, ClientIP, LoginType.Default);
+                    BackgroundJob.Enqueue<IHangfireBackJob>(job => job.LoginRecord(userInfo, ClientIP, LoginType.Default));
                     if (string.IsNullOrEmpty(from))
                     {
                         return RedirectToAction("Index", "Home");
@@ -168,7 +169,8 @@ namespace Masuit.MyBlogs.Core.Controllers
                     SameSite = SameSiteMode.Lax
                 });
             }
-            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.LoginRecord), "default", userInfo, ClientIP, LoginType.Default);
+
+            BackgroundJob.Enqueue<IHangfireBackJob>(job => job.LoginRecord(userInfo, ClientIP, LoginType.Default));
             string refer = Request.Cookies["refer"];
             Response.Cookies.Delete(nameof(RsaKey.PublicKey), new CookieOptions()
             {
@@ -244,4 +246,4 @@ namespace Masuit.MyBlogs.Core.Controllers
             return Request.Method.Equals(HttpMethods.Get) ? RedirectToAction("Index", "Home") : ResultData(null, message: "注销成功!");
         }
     }
-}
+}

+ 3 - 2
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -1,5 +1,6 @@
 using AngleSharp;
 using CacheManager.Core;
+using DocumentFormat.OpenXml.Office2010.Excel;
 using EFCoreSecondLevelCacheInterceptor;
 using Hangfire;
 using JiebaNet.Segmenter;
@@ -103,7 +104,7 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             if (notRobot && string.IsNullOrEmpty(HttpContext.Session.Get<string>("post" + id)))
             {
-                HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.RecordPostVisit), args: new dynamic[] { id, ClientIP, Request.Headers[HeaderNames.Referer].ToString(), HttpUtility.UrlDecode(Request.Scheme + "://" + Request.Host + Request.Path + Request.QueryString) });
+                BackgroundJob.Enqueue<IHangfireBackJob>(job => job.RecordPostVisit(id, ClientIP, Request.Headers[HeaderNames.Referer].ToString(), HttpUtility.UrlDecode(Request.Scheme + "://" + Request.Host + Request.Path + Request.QueryString)));
                 HttpContext.Session.Set("post" + id, id.ToString());
             }
 
@@ -757,7 +758,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 p.Status = Status.Schedule;
                 p.PostDate = timespan.Value.ToUniversalTime();
                 p.ModifyDate = timespan.Value.ToUniversalTime();
-                HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(HangfireBackJob.PublishPost), args: p);
+                BackgroundJob.Enqueue<IHangfireBackJob>(job => job.PublishPost(p));
                 return ResultData(p.Mapper<PostDto>(), message: $"文章于{timespan.Value:yyyy-MM-dd HH:mm:ss}将会自动发表!");
             }
 

+ 3 - 2
src/Masuit.MyBlogs.Core/Extensions/Firewall/RequestInterceptMiddleware.cs

@@ -1,4 +1,5 @@
-using Masuit.MyBlogs.Core.Common;
+using Hangfire;
+using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Configs;
 using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using Masuit.MyBlogs.Core.Models.ViewModel;
@@ -76,7 +77,7 @@ namespace Masuit.MyBlogs.Core.Extensions.Firewall
                         new Uri(referer);//判断是不是一个合法的referer
                         if (!referer.Contains(context.Request.Host.Value) && !referer.Contains(new[] { "baidu.com", "google", "sogou", "so.com", "bing.com", "sm.cn" }))
                         {
-                            HangfireHelper.CreateJob(typeof(IHangfireBackJob), nameof(IHangfireBackJob.UpdateLinkWeight), args: new dynamic[] { referer, ip });
+                            BackgroundJob.Enqueue<IHangfireBackJob>(job => job.UpdateLinkWeight(referer, ip));
                         }
                     }
                     catch

+ 18 - 0
src/Masuit.MyBlogs.Core/Extensions/Hangfire/HangfireActivator.cs

@@ -0,0 +1,18 @@
+using Hangfire;
+
+namespace Masuit.MyBlogs.Core.Extensions.Hangfire;
+
+public class HangfireActivator : JobActivator
+{
+    private readonly IServiceProvider _serviceProvider;
+
+    public HangfireActivator(IServiceProvider serviceProvider)
+    {
+        _serviceProvider = serviceProvider;
+    }
+
+    public override object ActivateJob(Type type)
+    {
+        return _serviceProvider.GetService(type);
+    }
+}

+ 23 - 0
src/Masuit.MyBlogs.Core/Extensions/Hangfire/HangfireJobInit.cs

@@ -0,0 +1,23 @@
+using Hangfire;
+
+namespace Masuit.MyBlogs.Core.Extensions.Hangfire
+{
+    /// <summary>
+    /// hangfire配置
+    /// </summary>
+    public static class HangfireJobInit
+    {
+        /// <summary>
+        /// hangfire初始化
+        /// </summary>
+        public static void Start()
+        {
+            RecurringJob.AddOrUpdate<IHangfireBackJob>(job => job.CheckLinks(), "0 */5 * * *"); //每5h检查友链
+            RecurringJob.AddOrUpdate<IHangfireBackJob>(job => job.EverydayJob(), Cron.Daily(5), TimeZoneInfo.Local); //每天的任务
+            RecurringJob.AddOrUpdate<IHangfireBackJob>(job => job.CreateLuceneIndex(), Cron.Weekly(DayOfWeek.Monday, 5), TimeZoneInfo.Local); //每周的任务
+            RecurringJob.AddOrUpdate<IHangfireBackJob>(job => job.EverymonthJob(), Cron.Monthly(1, 0, 0), TimeZoneInfo.Local); //每月的任务
+            RecurringJob.AddOrUpdate<IHangfireBackJob>(job => job.StatisticsSearchKeywords(), Cron.Hourly); //每小时的任务
+            BackgroundJob.Enqueue<IHangfireBackJob>(job => job.StatisticsSearchKeywords());
+        }
+    }
+}

+ 6 - 6
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -52,11 +52,11 @@
         <PackageReference Include="IP2Region" Version="1.2.0" />
         <PackageReference Include="Karambolo.AspNetCore.Bundling.NUglify" Version="3.5.1" />
         <PackageReference Include="MaxMind.GeoIP2" Version="5.1.0" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.1" />
-        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.1" />
-        <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.1" />
-        <PackageReference Include="Microsoft.Graph" Version="4.17.0" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.2" />
+        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.2" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.2" />
+        <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.2" />
+        <PackageReference Include="Microsoft.Graph" Version="4.18.0" />
         <PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
         <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
         <PackageReference Include="OpenXmlPowerTools-NetStandard" Version="4.4.21" />
@@ -66,7 +66,7 @@
         <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.15" />
         <PackageReference Include="TimeZoneConverter" Version="5.0.0" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.7" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.9" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 1 - 1
src/Masuit.MyBlogs.Core/PrepareStartup.cs

@@ -72,7 +72,7 @@ namespace Masuit.MyBlogs.Core
 
         public static void SetupHangfire(this IApplicationBuilder app)
         {
-            app.UseHangfireServer().UseHangfireDashboard("/taskcenter", new DashboardOptions()
+            app.UseHangfireDashboard("/taskcenter", new DashboardOptions()
             {
                 Authorization = new[]
                 {

+ 3 - 1
src/Masuit.MyBlogs.Core/Startup.cs

@@ -21,6 +21,7 @@ using Masuit.Tools.Config;
 using Masuit.Tools.Core.AspNetCore;
 using Masuit.Tools.Core.Net;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Primitives;
 using Polly;
 using System.Net;
@@ -88,8 +89,9 @@ namespace Masuit.MyBlogs.Core
             });
             services.AddSession().AddAntiforgery(); //注入Session
             services.AddResponseCache().AddCacheConfig();
-            services.AddHangfire((_, configuration) =>
+            services.AddHangfireServer().AddHangfire((serviceProvider, configuration) =>
             {
+                configuration.UseActivator(new HangfireActivator(serviceProvider));
                 configuration.UseFilter(new AutomaticRetryAttribute());
                 configuration.UseMemoryStorage();
             }); //配置hangfire