1

実行中の Quartz.net ジョブ内から IOC を使用して現在の nhibernate セッションにアクセスしようとしていますが、次のように null として返されるたびに:

「NHibernateSession.Current」は、タイプ「SharpArch.Domain.PreconditionException」NHibernate.ISession SharpArch.Domain.PreconditionException} の例外をスローしました。ISessionStorage が構成されていません

これが私の現在のコード設定です。IScheduledMessageQueries クエリ内の NHibernate ISession が正しく設定されるように、IOC をセットアップする方法を一生理解できません。Quartz トリガーは正しく機能していますが、ISession にアクセスしてジョブ内からクエリを呼び出すことができません。ヘルプやアドバイスはありますか?

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