Quartznet: рд╡рд┐рдХрд▓реНрдк рдкреИрдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рд╕рд┐рддре░ 2020  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: quartznet/quartznet

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?
"рдореИрдВ рд╣рдореЗрд╢рд╛ рдирд┐рд░рд╛рд╢ рд░рд╣рддрд╛ рд╣реВрдВ рдЬрдм" рдореИрдВ IServiceProvider рддрдХ configure рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ AddQuartz рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЖрдк рдЬреЛ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
AddQuartz рдореЗрдВ AddQuartz(this IServiceCollection serviceCollection, Action<IServiceProvider, IServiceCollectionQuartzConfigurator>? configure = null) рдЬреИрд╕реЗ рдУрд╡рд░рд▓реЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред AddContext ред

рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред IConfigureOptions<QuartzOptions> ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AddCors рдпрд╣ CorsOptions рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред рдХреЙрд░реНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ IServiceProvider рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ IConfigureOptions<CorsOptions> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ AddQuartz рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрдВрдбреНрд░рдпреВ рд▓реЙрдХ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдХреБрдЫ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реЗрдЧреАред

рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдПрдХ рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд AddQuartz(this IServiceCollection serviceCollection, Action<IServiceProvider, IServiceCollectionQuartzConfigurator>? configure = null) рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рдХрд╛рдлреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреАрдЖрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рджреВрд╕рд░реЗ рдиреЛрдЯ рдкрд░ рдЕрдЧрд░ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рддреЛ рд╡рд╣рд╛рдВ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рднреА рдЕрд░реНрде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореИрдВ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдп рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рддреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЗрд╕ рдмрд╛рд░ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдлреАрдбрдмреИрдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЧрд▓рдд рдореБрджреНрджреЗ рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛, рдпрд╣ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рд╕рдм рдареАрдХ рд╣реИ, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ:

.AddQuartz((serviceProvider, configurator) => {
    var cron = serviceProvider
        .GetRequiredService<IOptions<MyOptions>>()
        .Value
        .Cron;
    configurator.AddTrigger(trigger => trigger
        .ForJob("MyJob")
        .WithCronSchedule(cron));
});

рдлрд╝рд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд, рдСрдЯреЛ-рд░реАрдлрд╝реНрд░реЗрд╢, рд╢реЗрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП XML рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЪреЗрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди/рд╕реЗрд╡рд╛ рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рджреЗрдЦрддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ 2-рдкреНрд░рддрд┐рд╢рдд: рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ IServiceProvider ConfigureServices рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЕрд╕реНрдерд╛рдпреА DI рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП services.BuildServiceProvider() рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдПрдХ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрднреНрдпрд╛рд╕, рдЬрд┐рд╕реЗ рд╣рд╛рд▓ рдХреЗ VS/.NET рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓рд░реНрдЯ рдХреЛ рднреА рдлрд╝реНрд▓реИрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдпрджрд┐ Quartz.NET рдиреЗ Microsoft.Extensions.Options рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ OpenIddict рд░реЗрдкреЛ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ) рддреЛ @ljani рдХреА рдирд╡реАрдирддрдо рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рддрдирд╛:

services.AddOptions<QuartzOptions>()
    .Configure<IOptions<MyOptions>>((options, dep) =>
    {
        options.AddTrigger(trigger => trigger
            .ForJob("MyJob")
            .WithCronSchedule(dep.Value.Cron));
    });

рдзрдиреНрдпрд╡рд╛рдж @kevinchalet рдореЗрдВ рдЪрд┐рдВрд░рд╛рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП! рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдЗрд╕ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдЕрдм рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк рдореЙрдбрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреАрдЖрд░ https://github.com/quartznet/quartznet/pull/978 рдХреЗ рд╕рд╛рде @kevinchalet рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреИрдЯрд░реНрди рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

@ рд▓рд╣рдорд╛ рдореЗрд░реА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕