0

Castle Windsor を IoC コンテナーとして使用し、NHibernate を使用すると、次のように登録されます。

Component.For<ICustomSessionFactory>()
  .ImplementedBy<MsSql2008SessionFactory>().LifeStyle.Singleton,

Component.For<ISession>()
 .UsingFactoryMethod(kernel => kernel.Resolve<ICustomSessionFactory>()
     .OpenSession()).LifeStyle.PerWebRequest,

はどこISessionにありますかNHibernate.ISession

これはうまくいきます。私の質問は、私のISession.

キャッスル ウィンザーはセッションの終了に対処してくれますか?それとも自分でセッションを終了する必要がありますか?

ドキュメントには次のことが記載されています。

したがって、Windsor は、Web 要求ごとのオブジェクトを解放するタイミングを認識しており、ユーザーの操作を必要とせずに解放します。

これは、セッションの終了がデフォルトで処理されるということですか?

4

1 に答える 1

1

はい、ウィンザーがセッションを閉じます。

すべてのコンテナー情報をログに記録することもできます。

        void ConfigureContainer()
        {
            _container = new WindsorContainer();

            _container.Install(new LoggerInstaller());
            _logger = _container.Resolve<ILogger>();

#if DEBUG
            _container.Kernel.ComponentRegistered += (k, h) => _logger.Debug(String.Format("Registered {0} - {1}/{2}", k, h.ComponentModel.ComponentName.Name, h.ComponentModel.Implementation.FullName));
            _container.Kernel.ComponentDestroyed += (k, h) => _logger.Debug(String.Format("Destoyed {0} - ", k.ComponentName.Name));
#endif
            _container.Install(new ContainerInstaller());
            _container.Install(new NHibernateInstaller());
            _container.Install(new ValidationInstaller());
        }
于 2012-05-12T11:58:51.443 に答える