You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.2 KiB

4 weeks ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Autofac;
using Hangfire;
using Hangfire.SqlServer;
using PluginSystem;
using JobSystem;
namespace WpfApp4
{
public class Startup
{
private const string PluginDirectory = "Plugins";
private const string ConnectionString = "Server=127.0.0.1;Database=HANGFIRE;User ID=sa;Password=1;";
public IContainer ConfigureContainer()
{
var builder = new ContainerBuilder();
// 配置Hangfire存储
builder.Register(c => new SqlServerStorage(ConnectionString))
.As<JobStorage>()
.SingleInstance();
// 注册Hangfire服务
builder.RegisterType<BackgroundJobServer>()
.AsSelf()
.SingleInstance();
builder.RegisterType<RecurringJobManager>()
.As<IRecurringJobManager>()
.SingleInstance();
// 注册插件加载器
builder.RegisterType<PluginLoader>()
.WithParameter("pluginDirectory", Path.Combine(Directory.GetCurrentDirectory(), PluginDirectory))
.AsSelf()
.SingleInstance();
// 注册动态任务管理器
builder.RegisterType<DynamicJobManager>()
.AsSelf()
.SingleInstance();
// 加载并注册插件
var pluginLoader = new PluginLoader(Path.Combine(Directory.GetCurrentDirectory(), PluginDirectory));
pluginLoader.LoadPlugins(builder);
return builder.Build();
}
public void StartHangfireServer(IContainer container)
{
// 启动Hangfire服务器
var server = container.Resolve<BackgroundJobServer>();
server.Start();
// 注册所有插件任务
var jobManager = container.Resolve<DynamicJobManager>();
jobManager.RegisterAllPluginJobs();
}
}
}