Так вот в чем проблема. У меня есть общая библиотека классов, в которой хранятся все репозитории, домены и файлы сопоставлений, поэтому библиотека может быть повторно использована в других веб-приложениях. Теперь в этой библиотеке классов есть фрагмент кода, который позволяет самому создавать фабрику сеансов для использования в своих репозиториях. Код выглядит примерно так.
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. Теперь это работает нормально, но я беспокоюсь, что это не может быть потокобезопасным. Может ли кто-нибудь помочь мне с подходом, который поможет мне сделать его безопасным.
Несколько замечаний:
Я думал о настройке и построении SessionFactory в global.asax веб-приложений при запуске события, но проблема в том, что общая библиотека классов используется в 20 различных приложениях, так что это будет означать, что все приложения и обновление файла global.asax сейчас, прежде чем я сделаю это, я хотел бы задать вопрос, чтобы посмотреть, есть ли другие способы, которыми я могу пойти по этому поводу. Таким образом, общая библиотека классов может настраивать свою SessionFactory самостоятельно и при этом быть поточно-ориентированной.
Спасибо, что прочитали этот огромный вопрос. Подойдет любая помощь.