在我DefaultRegistry我有这样的配置:在StructureMap中,如何在运行时更改InstanceScope?
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?这应该如何实施? 另外,你认为这是一个获得长对话的好方法吗?或者有一种更好/更简单的方法来实现NHibernate的StructureMap &?
创建一个UnitOfWorkApplication类来处理UnitOfWork创建,并让StructureMap注入UnitOfWorkApplication实例而不是UnitOfWork实例解决了这个问题。非常感谢,你的解释正是我需要的。 – abutnaru 2009-05-24 16:55:10