Exemplo n.º 1
0
 public void Dispose()
 {
     Repository.Dispose();
     _session.Dispose();
     if (_scope != null)
     {
         _scope.Dispose();
     }
 }
Exemplo n.º 2
0
        public RefrenceSession <TRefObject> GetRefrenceSession()
        {
            // Если _sessionFactory == null то создаем временый скоуп с продолжительностью жизни,
            // равной продолжительности жизни создаваемой сессии. Из этого скоупа временно резолвим _sessionFactory
            // и зануляем его после получения сессии.
            AppScope localScope = null;

            try
            {
                if (_sessionFactory == null || RepositoryFactory == null)
                {
                    localScope        = AppCore.Instance.BeginScope();
                    _sessionFactory   = localScope.Resolve <Func <IDocumentSession> >();
                    RepositoryFactory = localScope.Resolve <Func <IDocumentSession, IRepository <TRefObject> > >();
                }

                using (var rootSession = _sessionFactory())
                {
                    IDocumentSession         session    = rootSession.Advanced.DocumentStore.OpenSession();
                    IRepository <TRefObject> repository = RepositoryFactory(session);

                    if (localScope != null)
                    {
                        _sessionFactory   = null;
                        RepositoryFactory = null;
                    }

                    return(new RefrenceSession <TRefObject>(repository, session, localScope));
                }
            }
            catch
            {
                if (localScope != null)
                {
                    localScope.Dispose();
                }

                throw;
            }
        }