【问题标题】:Access object from Ninject when setting up Topshelf and Quartz.Net console application设置 Topshelf 和 Quartz.Net 控制台应用程序时从 Ninject 访问对象
【发布时间】:2016-08-08 18:29:39
【问题描述】:

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

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

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

在运行时间的 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;
        }
    }
}

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

【问题讨论】:

  • @Steven 感谢您的编辑。那看起来确实更好。不要假设您有一个简单的注射器示例,是吗?我没有和 Ninject 结婚;只是想了解更多关于 IoC 和 DI 的信息。 :)

标签: c# scheduled-tasks ninject quartz.net topshelf


【解决方案1】:

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

var config = NinjectBuilderConfigurator.Kernel.Get<IConfiguration>();

【讨论】:

  • 非常感谢@Kate。我认为这正是我所缺少的。抱歉回复晚了。
猜你喜欢
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
相关资源
最近更新 更多