设置 Topshelf 和 Quartz.Net 控制台应用程序时从 Ninject 访问对象

Ric*_*eil 2 c# ninject scheduled-tasks quartz.net topshelf

在配置 Ninject/Topshelf/Quartz.Net 设置期间使用对象的正确方法是什么?

我创建了一个IocModule将我的接口绑定到一个具体类:

public class IocModule : NinjectModule
{
    public override void Load()
    {
        Bind<IConfiguration>().To<JsonConfiguration>().InSingletonScope();
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行时间的 Quartz.Net 设置期间,我需要此配置中的一些值,但使用IConfiguration configuration = new JsonConfiguration();似乎不是执行此操作的正确方法:

namespace Question {
    public class Program {
        public static int Main(string[] args) {
            var exitCode = HostFactory.Run(c => {
                c.UseNinject(new IocModule());

                // How can I get this from Ninject?
                IConfiguration configuration = new JsonConfiguration();
                configuration.Load();
                c.Service<Service>(sc => {
                    sc.ConstructUsingNinject();
                    sc.WhenStarted((service, control) => service.Start(control));
                    sc.WhenStopped((service, control) => service.Stop(control));
                    sc.UseQuartzNinject();
                    sc.ScheduleQuartzJob(q => q.WithJob(() =>
                        JobBuilder.Create<IvansLauncher>().Build())
                            .AddTrigger(() =>
                                TriggerBuilder.Create()
                                    .StartNow()
                                    .WithSchedule(CronScheduleBuilder
                                        .MonthlyOnDayAndHourAndMinute(
                                            configuration.DayToRun,
                                            configuration.HourToRun,
                                            configuration.MinuteToRun))
                                    .Build()));
                });
                c.EnablePauseAndContinue();
                c.EnableShutdown();
                c.StartAutomaticallyDelayed();
                c.RunAsLocalSystem();
            });
            return (int) exitCode;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助/建议将不胜感激。

小智 5

我相信您可以使用 NinjectBuilderConfigurator 访问内核:

var config = NinjectBuilderConfigurator.Kernel.Get<IConfiguration>();
Run Code Online (Sandbox Code Playgroud)