コード例 #1
0
 static OptionsPageViewModel()
 {
     tracker = DependencyTracker.Create <OptionsPageViewModel>(configurator =>
     {
         configurator
         .RaiseProperty(model => model.IsDirty)
         .CalculatedBy(model => true)
         .WhenPropertyChanged(model => model.Delay);
     });
 }
コード例 #2
0
ファイル: CacheAccessor.cs プロジェクト: 13daysaweek/iFlyShop
        public CacheAccessor(string cacheConnectionString, IDependencyTracker dependencyTracker)
        {
            if (string.IsNullOrWhiteSpace(cacheConnectionString))
            {
                throw new ArgumentException(Strings.CacheAccessor_Empty_ConnectionString_Message, nameof(cacheConnectionString));
            }

            _connectionString  = cacheConnectionString;
            _dependencyTracker = dependencyTracker ?? throw new ArgumentNullException(nameof(dependencyTracker));
            _redisHost         = _connectionString.Substring(0, _connectionString.IndexOf(",", StringComparison.Ordinal));
        }
コード例 #3
0
        public void Constructor_Should_Throw_ArgumentNullException_When_IDependencyTracker_Is_Null()
        {
            // Arrange
            var connectionString = _fixture.Create <string>();
            IDependencyTracker dependencyTracker = null;
            Action             ctor = () => new CacheAccessor(connectionString, dependencyTracker);

            // Act + Assert
            ctor.Should()
            .Throw <ArgumentNullException>();
        }
コード例 #4
0
        /// <summary>
        /// Creates an instance of IMongoDatabase from connection string in <i>Settings</i> class
        /// </summary>
        /// <param name="connection">Connection to data source</param>
        /// <param name="dependencyTracker">Inject dependency tracking implementation</param>
        internal DbContext(Connection connection, IDependencyTracker dependencyTracker)
        {
            NotTrackedCommands = (NotTrackedCommands == null || NotTrackedCommands.Count() == 0) ? new[] { "isMaster", "buildInfo", "getLastError", "saslStart", "saslContinue" } : NotTrackedCommands;
            var notTrackedCommands = NotTrackedCommands.Select(v => v.ToLower()).ToImmutableHashSet();

            DependencyTracker = dependencyTracker;

            string              connectionString    = connection.GetConnectionString();
            MongoUrl            mongoUrl            = new MongoUrl(connectionString);
            MongoClientSettings mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl);

            mongoClientSettings.ClusterConfigurator = clusterConfigurator =>
            {
                clusterConfigurator.Subscribe <CommandStartedEvent>(e =>
                {
                    if (e.Command != null && !notTrackedCommands.Contains(e.CommandName.ToLower()))
                    {
                        QueriesBuffer.TryAdd(e.RequestId, e.Command.ToString());
                    }
                });

                clusterConfigurator.Subscribe <CommandSucceededEvent>(e =>
                {
                    if (notTrackedCommands.Contains(e.CommandName.ToLower()))
                    {
                        return;
                    }
                    if (QueriesBuffer.TryRemove(e.RequestId, out string query))
                    {
                        DependencyTracker.Dependency(e.CommandName, query, true, e.Duration);
                    }
                });

                clusterConfigurator.Subscribe <CommandFailedEvent>(e =>
                {
                    if (notTrackedCommands.Contains(e.CommandName.ToLower()))
                    {
                        return;
                    }
                    if (QueriesBuffer.TryRemove(e.RequestId, out string query))
                    {
                        DependencyTracker.Dependency(e.CommandName, query, false, e.Duration);
                    }
                });
            };

            DatabaseName = new MongoUrl(connectionString).DatabaseName;
            Client       = new MongoClient(mongoClientSettings);
        }
コード例 #5
0
        public Repository(Connection connection, IDependencyTracker dependencyTracker)
        {
            if (Context == null)
            {
                Context = new DbContext(connection, dependencyTracker);
            }
            CollectionName = typeof(T).Name.ToLower();
            Collection     = Context.Database.GetCollection <T>(CollectionName);

            //Create index for CreationDate (descending), if it does not exists
            var  indexes         = Collection.Indexes.List().ToList();
            bool DoesIndexExists = indexes.Any(x => x.GetValue("name").AsString == "CreationDateIndex");

            if (!DoesIndexExists)
            {
                var indexBuilder = Builders <T> .IndexKeys;
                var indexModel   = new CreateIndexModel <T>(indexBuilder.Descending(x => x.CreationDate), new CreateIndexOptions {
                    Name = "CreationDateIndex"
                });
                Collection.Indexes.CreateOneAsync(indexModel);
            }
        }
コード例 #6
0
 public MongoClientFactory(IDependencyTracker dependencyTracker,
                           MongoClientSettingsFactorySettings settings = null,
                           ILogger logger = null)
 {
     _configurator = new MongoTrackingConfigurator(dependencyTracker, settings, logger);
 }
コード例 #7
0
 public StorageFactory(IDependencyTracker dependencyTracker)
 {
     this.dependencyTracker = dependencyTracker;
 }
コード例 #8
0
 public Storage(CloudTable cloudTable, IDependencyTracker dependencyTracker)
 {
     this.cloudTable        = cloudTable;
     this.dependencyTracker = dependencyTracker;
 }
        public MongoTrackingConfigurator(IDependencyTracker dependencyTracker,
                                         MongoClientSettingsFactorySettings settings = null,
                                         ILogger logger = null)
        {
            _dependencyTracker = dependencyTracker ?? throw new ArgumentNullException($"{nameof(dependencyTracker)} is required");
            var notTrackedCommands = (settings ?? new MongoClientSettingsFactorySettings()).NotTrackedCommands.Select(v => v.ToLower()).ToImmutableHashSet();

            OnCommandStartEvent = e =>
            {
                try
                {
                    if (e.Command != null && !notTrackedCommands.Contains(e.CommandName.ToLower()))
                    {
                        // ReSharper disable once SpecifyACultureInStringConversionExplicitly
                        _queriesBuffer.TryAdd(e.RequestId, e.Command.ToString());
                    }
                }
                catch (Exception exception)
                {
                    logger?.Exception(exception);
                }
            };

            OnCommandSucceededEvent = e =>
            {
                if (notTrackedCommands.Contains(e.CommandName.ToLower()))
                {
                    return;
                }

                try
                {
                    if (_queriesBuffer.TryRemove(e.RequestId, out var query))
                    {
                        OnCommandCompleted(
                            new MongoCommandCompletedEventArgs(e.CommandName, query, true,
                                                               e.Duration));
                    }
                }
                catch (Exception exception)
                {
                    logger?.Exception(exception);
                }
            };

            OnCommandFailedEvent = e =>
            {
                if (notTrackedCommands.Contains(e.CommandName.ToLower()))
                {
                    return;
                }
                try
                {
                    if (_queriesBuffer.TryRemove(e.RequestId, out var query))
                    {
                        OnCommandCompleted(
                            new MongoCommandCompletedEventArgs(e.CommandName, query, false,
                                                               e.Duration));
                    }
                }
                catch (Exception exception)
                {
                    logger?.Exception(exception);
                }
            };
        }