0
Jethrob created
I've tried following your sample application to create a seperate Console Application in which to host Quartz Scheduler. AbpHangfireConsoleApp
Would it be possilbe to provide a simple sample application which shows how this is done.
The below code throws "Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application."
`
public class ExampleTask : JobBase, ITransientDependency
{
private readonly TenantManager tenantManager;
public ExampleTask(TenantManager tenantManager)
{
this.tenantManager = tenantManager;
}
public override Task Execute(IJobExecutionContext context)
{
Logger.Debug("Starting ExampleTask.");
foreach (var tenant in tenantManager.Tenants) //Thows Exception
{
UnitOfWorkManager.Current.SetTenantId(tenant.Id);
var value = SettingManager.GetSettingValue("Value");
}
return Task.CompletedTask;
}
}
public sealed class AbpConsoleApplication where TStartupModule : AbpModule
{
///
/// Gets a reference to the instance.
///
public static AbpBootstrapper AbpBootstrapper { get; } = AbpBootstrapper.Create();
public void Application_Start()
{
AbpBootstrapper.Initialize();
AbpBootstrapper.IocManager.IocContainer.AddFacility(
f => f.UseAbpLog4Net().WithConfig($"{GetAppPath()}log4net.config")
);
}
private static string GetAppPath()
{
string appPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
if (!appPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
appPath += Path.DirectorySeparatorChar;
return appPath;
}
public void Application_End()
{
AbpBootstrapper.Dispose();
}
}
// This runs in Program.cs
private static async Task RunScheduler()
{
try
{
Console.WriteLine("Scheduler Starting.");
AbpConsoleApplication app = new AbpConsoleApplication();
app.Application_Start();
using (var quartzConfiguration = AbpConsoleApplication.AbpBootstrapper.IocManager.ResolveAsDisposable())
{
foreach (var tjob in JobsConfiguration.Jobs())
{
await quartzConfiguration.Object.Scheduler.ScheduleJob(tjob.Job, tjob.Trigger);
}
}
await Task.Delay(-1);
app.Application_End();
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
`