1

我正在尝试使用 IOC 从正在运行的 Quartz.net 作业中访问我当前的休眠会话,并且每次它返回为 null 时都说明以下内容:

“NHibernateSession.Current”引发了“SharpArch.Domain.PreconditionException”NHibernate.ISession SharpArch.Domain.PreconditionException} 类型的异常。尚未配置 ISessionStorage

这是我当前的代码设置。我一生都无法弄清楚如何设置我的 IOC,以便正确设置我的 IScheduledMessageQueries 查询中的 NHibernate ISession。Quartz 触发器工作正常,我只是无法访问 ISession 以从 Job 中调用我的查询。任何帮助和/或建议?

Global.cs 代码:

protected virtual void InitializeServiceLocator()
{
    _container = new WindsorContainer(new XmlInterpreter()).Install(new WebWindsorInstaller());
    StartQuartzScheduler();            
    ComponentRegistrar.AddComponentsTo(_container);
    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));

    DependencyResolver.SetResolver(new WindsorDependencyResolver(_container));
    var activator = new WebApiControllerFactory(_container);
    GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), activator);
}

private static void StartQuartzScheduler()
{
    ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
    IJobFactory jobFactory = new WindsorJobFactory(_container);
    var scheduler = schedulerFactory.GetScheduler();
    scheduler.JobFactory = jobFactory;
    scheduler.Start();
    var sendScheduledMessageJob = new JobDetailImpl("sendScheduledMessageJob", typeof(SendScheduledMessageJob));
    var trigger = new CalendarIntervalTriggerImpl
    {
        StartTimeUtc = DateTime.UtcNow.Subtract(new TimeSpan(1)),
        Name = "Daily Trigger",
        RepeatIntervalUnit = IntervalUnit.Second,
        RepeatInterval = 1
    };
    scheduler.ScheduleJob(sendScheduledMessageJob, trigger);
}

public class SendScheduledMessageJob : IJob
{
    private readonly IScheduledMessageQueries _scheduledMessageQueries;
    public SendScheduledMessageJob(IScheduledMessageQueries scheduledMessageQueries)
    {
        _scheduledMessageQueries = scheduledMessageQueries;
    }

    public void Execute(IJobExecutionContext context)
    {

        var unsentScheduledMessages =
            _scheduledMessageQueries.GetAllUnsentScheduledMessages(DateTime.Now);
    }
}
4

0 回答 0