Я использую SharpArchitecture в приложении ASP.NET MVC 3.Все прекрасно работает.
Использование NHibernateInitializer от SharpArchitecture для инициализации нового сеанса для каждого запроса, например, так:
protected void Application_BeginRequest(object sender, EventArgs e)
{
NHibernateInitializer.Instance().InitializeNHibernateOnce(InitializeNHibernateSession);
}
private void InitializeNHibernateSession(ISessionStorage sessionStorage)
{
NHibernateSession.ConfigurationCache = new NHibernateConfigurationFileCache(
new[] { "App.Core" });
NHibernateSession.Init(
sessionStorage,
new[] { Server.MapPath("~/bin/" + ApplicationSettings.Instance.NHibernateMappingAssembly) },
new AutoPersistenceModelGenerator().Generate(),
Server.MapPath("~/NHibernate.config"));
NHibernateSession.AddConfiguration(ApplicationSettings.NHIBERNATE_OTHER_DB,
new[] { Server.MapPath("~/bin/" + ApplicationSettings.Instance.NHibernateMappingAssembly) },
new AutoPersistenceModelGenerator().Generate(),
Server.MapPath("~/NHibernateForOtherDb.config"), null, null, null);
}
Как видите, мы также обращаемся к нескольким базам данных.Все в порядке.
Здесь я столкнулся с проблемой.
Мне нужно ускорить отдельный поток для выполнения механизма опроса базы данных.Я намеревался сделать что-то вроде этого:
protected void Application_Start()
{
....
ThreadingManager.Instance.ExecuteAction(() =>
{
// initialize another NHibernateSession within SharpArchitecture somehow
NHibernateInitializer.Instance().InitializeNHibernateOnce(InitializeNHibernateSession);
var service = container.Resolve<IDatabaseSynchronizationService>();
service.SynchronizeRepositories();
});
}
И через мой SynchronizationService вызываются некоторые репозитории.Очевидно, что когда они пытаются получить доступ к своему сеансу, возникает исключение, потому что сеанс имеет значение null.
Вот мой вопрос.Как я могу использовать NHibernateSession от SharpArchitecture и каким-то образом получить его или его копию в моей теме опроса?Я надеюсь, что это можно сделать без необходимости обхода встроенных SessionManager и SessionFactories, используемых SharpArchitecture.