【发布时间】:2018-10-12 06:03:32
【问题描述】:
我尝试让quartz 和log4net 与ninject 一起工作。
Ninject 和 log4net(没有 quartz)完美运行。
但是当我使用Quartz 时,作业已执行但记录器无法正常工作。 (空控制台)
下面是Ninject的配置:
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
kernel.Bind<ILog>().ToMethod(x => LogManager.GetLogger(x.Request.Target != null
? x.Request.Target.Member.DeclaringType
: x.Request.Service));
kernel.Bind<IScheduler>().ToMethod(x =>
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
var sched = schedulerFactory.GetScheduler().Result;
sched.JobFactory = new NinjectJobFactory(kernel);
return sched;
});
和ninjetJobFactory:
class NinjectJobFactory : SimpleJobFactory
{
readonly IKernel _kernel;
public NinjectJobFactory(IKernel kernel)
{
this._kernel = kernel;
}
public override IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
try
{
// this will inject dependencies that the job requires
return (IJob)this._kernel.Get(bundle.JobDetail.JobType);
}
catch (Exception e)
{
throw new SchedulerException(string.Format("Problem while instantiating job '{0}' from the NinjectJobFactory.", bundle.JobDetail.Key), e);
}
}
}
我使用this article 使Quarts 与ninject 一起工作。
我做了simple working example,你可以从github上下载测试。
感谢您的帮助。
【问题讨论】:
-
1.我使用控制台附加程序,控制台为空。 2.我在SimpleJob类中放断点,逐行调试
-
是的,我使用 WithQuartz 时没有创建文件。
-
我猜是调度程序调用的方法Execute,我不手动调用它
-
对不起,我可能没理解正确,我为测试添加了 Console.writeLine("test"),并且工作正常,每 3 秒显示一次文本
-
我发现这个thread 他们使用
common.logging。我想我应该试试。
标签: c# dependency-injection ninject log4net quartz.net