ASP.NET MVC アプリで NHIbernate と共に IoC に Castle Windsor を使用しています。次のように登録するとうまく機能します。
container.Register(Component.For<ISessionFactoryBuilder.().ImplementedBy<SessionFactoryBuilder>().LifestyleSingleton());
// Register the NHibernate session factory as a singleton using custom SessionFactoryBuilder.BuildSessionFactory method.
container.Register(Component.For<ISessionFactory>().UsingFactoryMethod(k => k.Resolve<ISessionFactoryBuilder>().BuildSessionFactory("ApplicationServices")).LifestyleSingleton());
container.Register(Component.For<ISession>().UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()).LifestylePerWebRequest());
しかし、監査を容易にするために、NHibernate IInterceptor を導入したいと考えています。通常、SessionFactory.OpenSession(...) は通常、コンポーネント登録中 (App_Start にある) の「並べ替え」ではなく、Begin_Request で呼び出されるため、後でインターセプターを簡単に渡すことができる NHibernate セッションマネージャーを使用しました。 )。残念ながら、その時点で LifestylePerWebRequest モジュールにアクセスすることはできないため、次の例では当然のことながら失敗します。
container.Register(Component.For<IInterceptor>().ImplementedBy<ChangeAuditInfoInterceptor>().LifestylePerWebRequest());
var interceptor = container.Resolve<IInterceptor>();
container.Register(Component.For<ISession>().UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession(interceptor)).LifestylePerWebRequest());
Castle Windsor で NHibernate セッション管理にこのアプローチを使用する場合、NHibernate Interceptor (通常は SessionFactory.OpenSession(IInterceptor) に挿入されます) を導入する最良の方法は何でしょうか?