私の 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 を使ってそれを行うためのより良い/より簡単な方法はありますか?