Я использую 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();
}
}
IЯ пытался изменить код сеанса, например:
For<ISession>()
.AlwaysUnique()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
, но я заметил, что теперь создается новый сеанс, даже если есть один активный.В моей ситуации я ссылаюсь на другой компонент (Rhino.Security), который разрешает ISession с помощью локатора службы.