public static SafeXmlReaderWriter Get(IScopeProviderInternal scopeProvider, AsyncLock xmlLock, XmlDocument xml, Action <XmlDocument> refresh, Action <XmlDocument, bool> apply, bool writer)
        {
            var scopeContext = scopeProvider.Context;

            // no real scope = just create a reader/writer instance
            if (scopeContext == null)
            {
                // obtain exclusive access to xml and create reader/writer
                var releaser = xmlLock.Lock();
                return(new SafeXmlReaderWriter(releaser, xml, refresh, apply, writer, false));
            }

            // get or create an enlisted reader/writer
            var rw = scopeContext.Enlist("safeXmlReaderWriter",
                                         () => // creator
            {
                // obtain exclusive access to xml and create reader/writer
                var releaser = xmlLock.Lock();
                return(new SafeXmlReaderWriter(releaser, xml, refresh, apply, writer, true));
            },
                                         (completed, item) => // action
            {
                item.DisposeForReal(completed);
            });

            // ensure it's not already in-use - should never happen, just being super safe
            if (rw._using)
            {
                throw new InvalidOperationException();
            }
            rw._using = true;

            return(rw);
        }
示例#2
0
 /// <summary>
 /// Create a configured DatabaseContext
 /// </summary>
 /// <param name="scopeProvider"></param>
 /// <param name="logger"></param>
 /// <param name="sqlSyntax"></param>
 /// <param name="providerName"></param>
 internal DatabaseContext(IScopeProviderInternal scopeProvider, ILogger logger, ISqlSyntaxProvider sqlSyntax, string providerName)
 {
     _providerName = providerName;
     SqlSyntax     = sqlSyntax;
     SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax;
     ScopeProvider = scopeProvider;
     _logger       = logger;
     _configured   = true;
 }
示例#3
0
 internal DatabaseContext(IScopeProviderInternal scopeProvider)
     : this(scopeProvider, LoggerResolver.Current.Logger, new SqlSyntaxProviders(new ISqlSyntaxProvider[]
 {
     new MySqlSyntaxProvider(LoggerResolver.Current.Logger),
     new SqlCeSyntaxProvider(),
     new SqlServerSyntaxProvider()
 }))
 {
 }
示例#4
0
        /// <summary>
        /// Create a configured DatabaseContext
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="logger"></param>
        /// <param name="sqlSyntax"></param>
        /// <param name="providerName"></param>
        public DatabaseContext(IDatabaseFactory factory, ILogger logger, ISqlSyntaxProvider sqlSyntax, string providerName)
        {
            _providerName = providerName;
            SqlSyntax     = sqlSyntax;
            SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax;

            var asDbFactory2 = factory as IDatabaseFactory2;

            ScopeProvider = asDbFactory2 == null
                ? new ScopeProvider(new DatabaseFactoryWrapper(factory))
                : new ScopeProvider(asDbFactory2);

            _logger     = logger;
            _configured = true;
        }
 public ScopeLifespanMessagesFactory(IHttpContextAccessor contextAccesor, IScopeProvider scopeProvider)
 {
     if (contextAccesor == null)
     {
         throw new ArgumentNullException("contextAccesor");
     }
     if (scopeProvider == null)
     {
         throw new ArgumentNullException("scopeProvider");
     }
     if (scopeProvider is IScopeProviderInternal == false)
     {
         throw new ArgumentException("Not IScopeProviderInternal.", "scopeProvider");
     }
     _contextAccessor = contextAccesor;
     _scopeProvider   = (IScopeProviderInternal)scopeProvider;
     Current          = this;
 }
示例#6
0
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="scopeProvider"></param>
        /// <param name="logger"></param>
        /// <param name="syntaxProviders"></param>
        internal DatabaseContext(IScopeProviderInternal scopeProvider, ILogger logger, SqlSyntaxProviders syntaxProviders)
        {
            if (scopeProvider == null)
            {
                throw new ArgumentNullException("scopeProvider");
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (syntaxProviders == null)
            {
                throw new ArgumentNullException("syntaxProviders");
            }

            ScopeProvider    = scopeProvider;
            _logger          = logger;
            _syntaxProviders = syntaxProviders;
        }
示例#7
0
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="logger"></param>
        /// <param name="syntaxProviders"></param>
        public DatabaseContext(IDatabaseFactory factory, ILogger logger, SqlSyntaxProviders syntaxProviders)
        {
            if (factory == null)
            {
                throw new ArgumentNullException("factory");
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (syntaxProviders == null)
            {
                throw new ArgumentNullException("syntaxProviders");
            }

            var asDbFactory2 = factory as IDatabaseFactory2;

            ScopeProvider = asDbFactory2 == null
                ? new ScopeProvider(new DatabaseFactoryWrapper(factory))
                : new ScopeProvider(asDbFactory2);

            _logger          = logger;
            _syntaxProviders = syntaxProviders;
        }
 public ScopeReference(IScopeProviderInternal scopeProvider)
 {
     _scopeProvider = scopeProvider;
 }
        public static SafeXmlReaderWriter Get(IScopeProviderInternal scopeProvider)
        {
            var scopeContext = scopeProvider.Context;

            return(scopeContext == null ? null : scopeContext.GetEnlisted <SafeXmlReaderWriter>("safeXmlReaderWriter"));
        }
 public ShadowWrapper(IFileSystem innerFileSystem, string shadowPath, IScopeProviderInternal scopeProvider)
 {
     _innerFileSystem = innerFileSystem;
     _shadowPath      = shadowPath;
     _scopeProvider   = scopeProvider;
 }