TopShelf'i Quartz.net ve Autofac ile birlikte kullanmaya çalışıyorum. Aşağıda sahip olduğum kod sadece iyi çalışıyor. Bununla birlikte, bu satır: yanlış şeyler yapma gibi görünüyor. Topshelf'e özel otofac iş gücünü kullanmanın daha iyi bir yolu var mı? İşyerindeki yaşam süresi ne kadar olacak? Endişeleniyorum ki bu kod satırı gelecekte bana bazı baş ağrılarına neden olacak. Artık gerekmediğinde işyerini nasıl serbest bırakırım? Bu hat tamam mı? Başvuru içinTopshelf'in Autofac'ın Quartz fabrikasını kullanması gerekiyor
class Poller : IJob
{
private readonly ILogger _log;
public Poller(ILogger log)
{
_log = log;
_log.Info("Instantiating...");
}
public void Execute(IJobExecutionContext context)
{
_log.Info("Executing...");
}
}
class Program
{
static Autofac.IContainer BuildContainer()
{
var builder = new ContainerBuilder();
builder.RegisterModule<NLogModule>();
builder.RegisterModule<QuartzAutofacFactoryModule>();
builder.RegisterModule(new QuartzAutofacJobsModule(typeof(Poller).Assembly));
var container = builder.Build();
return container;
}
static void Main(string[] args)
{
var container = BuildContainer();
HostFactory.Run(cfg =>
{
cfg.UseNLog();
cfg.UseAutofacContainer(container);
cfg.SetDescription("DESCRIPTION");
cfg.SetDisplayName("DISPLAY");
cfg.SetServiceName("NAME");
cfg.UsingQuartzJobFactory(() => container.Resolve<IJobFactory>());
cfg.ScheduleQuartzJobAsService(q =>
{
q.WithJob(() => JobBuilder.Create<Poller>().Build());
q.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(b => b.WithIntervalInSeconds(20).RepeatForever()).Build());
});
cfg.StartAutomatically();
cfg.RunAsLocalSystem();
});
}
}
: Bu örnek, birliğini kullanmak, Autofac.Extras.Quartz.QuartzAutofacFactoryModule