В моем DefaultRegistry у меня есть эта конфигурация:
ForRequestedType<INHUnitOfWork>().CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.OfConcreteType<NHibernateUnitOfWork>();
В какой-то момент в потоке веб-приложений я хочу изменить 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?