だからここに問題があります。私は、すべてのリポジトリ、ドメイン、およびマッピングファイルを保持する共通のクラスライブラリを持っているので、ライブラリは他のWebビーズアプリケーション内で再利用できます。現在、このクラスライブラリ内には、リポジトリで使用されるセッションファクトリを作成できるようにする一連のコードがあります。コードは次のようになります。
private static ISessionFactory sessionFactory;
private static Configuration configuration;
public static Configuration Configuration()
{
if (configuration == null)
{
configuration = new Configuration().Configure();
}
return configuration;
}
private static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
sessionFactory = Configuration().BuildSessionFactory();
}
return sessionFactory;
}
}
public static ISession GetCurrentSession()
{
if (!CurrentSessionContext.HasBind(SessionFactory))
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
return SessionFactory.GetCurrentSession();
}
したがって、リポジトリはGetCurrentSession()メソッドを呼び出してISessionを取得します。これで問題なく動作しますが、スレッドセーフではない可能性があるのではないかと心配しています。誰かが私がそれをスレッドセーフにするのを助けるアプローチで私を助けることができますか?
注意すべき点はほとんどありません。
開始イベント時にWebアプリケーションのglobal.asaxでSessionFactoryを構成および構築することを考えましたが、これに関する問題は、問題の共通クラスライブラリが20の異なるアプリケーション内で使用されるため、すべてのアプリケーションに移動して更新することを意味します。これを行う前に、global.asaxファイルに質問を出して、これについて他の方法があるかどうかを確認したいと思いました。共通クラスライブラリがそのSessionFactory自体を構成し、それでもスレッドセーフになるようにするためです。
この巨大な質問を読んでくれてありがとう。どんな助けでも評価します。