using System.Configuration; using System.Web.Hosting; using Hangfire; using Hangfire.Mongo; namespace Sony.ChartBot.Tasks { public class HangfireBootstrapper : IRegisteredObject { public static readonly HangfireBootstrapper Instance = new HangfireBootstrapper(); private readonly object _lockObject = new object(); private bool _started; private BackgroundJobServer _backgroundJobServer; private HangfireBootstrapper() { } public void Start() { lock (_lockObject) { if (_started) return; _started = true; HostingEnvironment.RegisterObject(this); GlobalConfiguration.Configuration.UseMongoStorage(GetConnectionString("mongodb"), "hangfire"); _backgroundJobServer = new BackgroundJobServer(); } } public void Stop() { lock (_lockObject) { if (_backgroundJobServer != null) { _backgroundJobServer.Dispose(); } HostingEnvironment.UnregisterObject(this); } } void IRegisteredObject.Stop(bool immediate) { Stop(); } private string GetConnectionString(string connectionStringName) { return ConfigurationManager .ConnectionStrings[connectionStringName] .ConnectionString; } } }