以下是使用流畅的StructureMap
的NH的相关配置ISessionFactory sessionFactory = fluentConfig.BuildSessionFactory();
For<Configuration>().LifecycleIs(new HybridLifecycle()).Singleton().Use(configuration);
For<ISessionFactory>().LifecycleIs(new HybridLifecycle()).Singleton().Use(sessionFactory);
For<ISession>().LifecycleIs(new ThreadLocalStorageLifecycle())
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
For<IUnitOfWork>().LifecycleIs(new ThreadLocalStorageLifecycle())
.Use<UnitOfWork>();
NH会话封装在UnitOfWork对象中。
在我的Windows服务中,每次访问会话时,它都在一个调用会话的线程池线程中,如下所示:
unitOfWork = ObjectFactory.GetInstance<IUnitOfWork>();
...
//Init repositories with the unitOfWork
//Have repos do their thing
...
unitOfWork.Commit();
unitOfWork.Dispose();
当我测试上述功能时,它总是在我第一次启动应用程序时起作用,但在任何其他时间随机工作。它不起作用的时间,因为会话为空。我发现如果我在上一次通话结束后等待大约30秒,下一次通话将会成功。
为什么会这样做?我正在尝试为每个线程配置会话?