同じ方針に沿ったCastlewindsorチュートリアルに従って、nhibernateの永続化機能を実装しました。
見る:
http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Six-Persistence-Layer.ashx http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Seven-Lifestyles.ashx
私は自分のアプリケーションで、プールが解放されて再度アクセスしようとすると、構築中のセッションファクトリに関連するエラーが最初に発生することに気づきました。
重複キーが追加されたなど。
それは私のマッピングとは関係がなく、施設が実行される方法や時期と関係があると思います。
さらにいくつかの調査を行った後、セッションファクトリはスレッドセーフである必要があると人々が言っているのを目にしますか?
これが正しければ、実行されるコードが1回だけ実行されることを保証するために、Castle Windsorだけに頼ることはできないというのが私の仮定ですか?
永続ファシリティの以下のinitメソッドを確認してください。initメソッドにさらにレベルのロックを追加する必要がありますか?
そして、これはそれを行うための正しい場所でしょうか?
私の施設-チュートリアルに従います:
public class PersistenceFacility : AbstractFacility
{
// ... etc.
protected override void Init()
{
Configuration config = BuildDatabaseConfiguration();
Kernel.Register(Component.For<ISessionFactory>().UsingFactoryMethod(_ => config.BuildSessionFactory()).LifestylePerWebRequest());
Kernel.Register(Component.For<ISession>().UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()).LifestylePerWebRequest());
}
}
App_Startでコンテナを初期化しますが、特別なことは何もしません。リポジトリからISessionを使用するだけで、すべてCastleWindsorを使用して解決されます。