Я использую StructureMap с Nhibernate, и я хотел бы проинструктировать инструмент для создания нового сеанса каждый раз, когда это необходимо, и только если оно удалено.
Я попробую чтобы объяснить с помощью некоторого кода (это консольное приложение).
Я создаю свою фабрику сеансов таким образом (ConnDb - моя строка подключения):
For<ISessionFactory>()
.Singleton()
.Use(() => new NHSessionFactory(ConnDb, true).SessionFactory);
и это код, который я использую для создания сеанса:
For<ISession>()
.Singleton()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
Все работает, как ожидалось, когда я не удаляю сеанс, но я хотел бы иметь возможность сделать что-то вроде этого:
using (session)
{
using (var tx = session.BeginTransaction())
{
// DO SOMETHING
tx.Commit();
}
}
using (session)
{
using (var tx = session.BeginTransaction())
{
// DO SOMETHING
tx.Commit();
}
}
Я пытался изменить код сеанса, например:
For<ISession>()
.AlwaysUnique()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
но я заметил, что теперь создается новый сеанс, даже если он активен. В моей ситуации я ссылаюсь на другой компонент (Rhino.Security), который разрешает ISession с помощью локатора службы.