在我的 DefaultRegistry 我有这个配置:
ForRequestedType<INHUnitOfWork>().CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.OfConcreteType<NHibernateUnitOfWork>();
在 Web 应用程序流程的某个时刻,我想将 InstanceScope 更改为 HttpSession 以获得长时间的对话,所以我这样做:
PluginTypeConfiguration config = ObjectFactory.Model.PluginTypes.FirstOrDefault(p => p.PluginType.FullName.Contains("INHUnitOfWork"));
config.Lifecycle.EjectAll();
config.Lifecycle = StructureMap.Pipeline.Lifecycles.GetLifecycle(InstanceScope.HttpSession);
这似乎取代了最初的 InstanceScope,不幸的是它只持续当前请求。当下一个请求到达时,初始配置再次处于活动状态,会话信息丢失。
后来我还希望能够通过以下方式恢复更改:
PluginTypeConfiguration config = ObjectFactory.Model.PluginTypes.FirstOrDefault(p => p.PluginType.FullName.Contains("INHUnitOfWork"));
config.Lifecycle.EjectAll();
config.Lifecycle = StructureMap.Pipeline.Lifecycles.GetLifecycle(InstanceScope.HttpContext);
但如果我让它在一个方向上工作,它可能会同时在两个方向上工作。
是否可以在运行时永久替换初始 InstanceScope?这应该如何实施?另外,您认为这是获得长时间对话的好方法,还是使用 StructureMap 和 NHibernate 有更好/更简单的方法?