所以这就是问题所在。我有一个通用类库,其中包含所有存储库、域和映射文件,因此可以在其他基于 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 并且是线程安全的。
感谢您阅读这个巨大的问题。将给予任何帮助。