public void Register(IRepository repository)
 {
     if (repositories.ContainsKey(repository.GetType().Name))
     {
         return;
     }
     repositories.Add(repository.GetType().Name, repository);
 }
        public void ReleasesSemaphoreAfterGetIsComplete()
        {
            var property  = _cacheRepository.GetType().GetField("SemaphoreSlim", BindingFlags.Static | BindingFlags.NonPublic);
            var semaphore = (SemaphoreSlim)property.GetValue(_cacheRepository);

            Assert.AreEqual(1, semaphore.CurrentCount);
        }
        private void ShouldSaveUpdateAndDeleteEntitySuccessfully <TEntity>(IUnitOfWork unitOfWork,
                                                                           IRepository <TEntity> repository,
                                                                           TEntity randomEntity) where TEntity : IEntity
        {
            string repositoryMessage = string.Format("Failed in {0}.", repository.GetType().Name);

            // Save new entity.
            repository.Save(randomEntity);
            unitOfWork.Session.Flush();

            TEntity entityFromDatabase = repository.FirstOrDefault(randomEntity.Id);

            Assert.IsNotNull(entityFromDatabase, repositoryMessage);
            Assert.AreEqual(randomEntity, entityFromDatabase, repositoryMessage);

            // Update entity.
            randomEntity.CreatedOn = Singleton.TestDataProvider.ProvideRandomDateTime();
            repository.Save(randomEntity);
            unitOfWork.Session.Flush();

            entityFromDatabase = repository.FirstOrDefault(randomEntity.Id);
            Assert.IsNotNull(entityFromDatabase, repositoryMessage);
            Assert.AreEqual(randomEntity, entityFromDatabase, repositoryMessage);

            // Delete entity.
            repository.Delete(randomEntity.Id);
            unitOfWork.Session.Flush();

            entityFromDatabase = repository.FirstOrDefault(randomEntity.Id);
            Assert.IsNull(entityFromDatabase, repositoryMessage);
        }
        public void ReleasesLockAfterGetIsComplete()
        {
            var property = _cacheRepository.GetType().GetField("Locks", BindingFlags.Static | BindingFlags.NonPublic);
            var locks    = (ConcurrentDictionary <string, SemaphoreSlim>)property.GetValue(_cacheRepository);

            Assert.AreEqual(1, locks.FirstOrDefault().Value.CurrentCount);
        }
        /// <summary>
        /// Returns the actions available in repository.
        /// </summary>
        public IEnumerable <IDynamicApiAction> GetRepositoryActions(IRepositoryManager repositoryManager, IRepository repository)
        {
            var repositoryType = repository.GetType();
            var interfaceType  = repository.ImplementedInterface;

            const BindingFlags flags = BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance;
            var interfaceMethods     = new List <MethodInfo>(interfaceType.GetMethods(flags)
                                                             .Where(e => Attribute.IsDefined(e, typeof(ApiActionAttribute))));

            foreach (Type interf in interfaceType.GetInterfaces())
            {
                foreach (MethodInfo method in interf.GetMethods(flags)
                         .Where(e => Attribute.IsDefined(e, typeof(ApiActionAttribute))))
                {
                    if (!interfaceMethods.Contains(method))
                    {
                        interfaceMethods.Add(method);
                    }
                }
            }


            foreach (var interfaceMethodInfo in interfaceMethods)
            {
                var methodInfo = repositoryType.GetMethod(interfaceMethodInfo.Name);
                yield return(CreateRepositoryAction(repositoryManager, repository, methodInfo, interfaceMethodInfo));
            }
        }
Beispiel #6
0
        public static async Task HardDeleteAsync <TEntity>(
            this IRepository <TEntity> repository,
            Expression <Func <TEntity, bool> > predicate,
            bool autoSave = false,
            CancellationToken cancellationToken = default
            )
            where TEntity : class, IEntity, ISoftDelete
        {
            if (!(ProxyHelper.UnProxy(repository) is IUnitOfWorkManagerAccessor unitOfWorkManagerAccessor))
            {
                throw new AbpException($"The given repository (of type {repository.GetType().AssemblyQualifiedName}) should implement the {typeof(IUnitOfWorkManagerAccessor).AssemblyQualifiedName} interface in order to invoke the {nameof(HardDeleteAsync)} method!");
            }

            var uowManager = unitOfWorkManagerAccessor.UnitOfWorkManager;

            if (uowManager == null)
            {
                throw new AbpException($"{nameof(unitOfWorkManagerAccessor.UnitOfWorkManager)} property of the given {nameof(repository)} object is null!");
            }

            if (uowManager.Current == null)
            {
                using (var uow = uowManager.Begin())
                {
                    await HardDeleteWithUnitOfWorkAsync(repository, predicate, autoSave, cancellationToken, uowManager.Current);

                    await uow.CompleteAsync(cancellationToken);
                }
            }
            else
            {
                await HardDeleteWithUnitOfWorkAsync(repository, predicate, autoSave, cancellationToken, uowManager.Current);
            }
        }
        /// <summary>
        /// 得到仓储定义的数据映射器的类型
        /// </summary>
        /// <param name="repository"></param>
        /// <returns></returns>
        internal static Type GetDataMapperType(IRepository repository)
        {
            var attribute = AttributeUtil.GetAttribute <DataMapperAttribute>(repository.GetType());

            if (attribute == null)
            {
                return(null);
            }
            return(attribute.DataMapperType);
        }
        public NotificationsService(Routes routes, IRepository repository)
        {
            Check.IsNotNull(routes, "routes");
            Check.IsNotNull(repository, "repository");

            this.routes = routes;
            this.repository = repository;

            Log.InfoFormat("Service initialized. Repository: [{0}].", repository.GetType());
        }
        private static DataStructureReadParameters CreateDataStructureReadParameters(IRepository repository, Type type)
        {
            var readParameterTypesProperty = repository.GetType().GetField("ReadParameterTypes", BindingFlags.Public | BindingFlags.Static);
            var specificFilterTypes        = readParameterTypesProperty == null?
                                             Array.Empty <KeyValuePair <string, Type> >() :
                                                 (KeyValuePair <string, Type>[])readParameterTypesProperty.GetValue(null);

            return(new DataStructureReadParameters(new Dictionary <string, KeyValuePair <string, Type>[]> {
                { type.FullName, specificFilterTypes }
            }));
        }
        private void ShouldGetAnyEntitySuccessfully <TEntity>(IRepository <TEntity> repository) where TEntity : IEntity
        {
            string  repositoryMessage = string.Format("Failed in {0}.", repository.GetType().Name);
            TEntity entity            = repository.AsQueryable().FirstOrDefault();

            Assert.IsNotNull(entity, repositoryMessage + " Table is empty.");
            TEntity entityViaGet = repository.FirstOrDefault(entity.Id);

            Assert.IsNotNull(entityViaGet);
            Assert.AreEqual(entity, entityViaGet);
        }
        private void ShouldLoadTop10EntitiesWithAllMethodSuccessfully <TEntity>(IRepository <TEntity> repository)
            where TEntity : IEntity
        {
            string repositoryMessage = string.Format("Failed in {0}.", repository.GetType().Name);

            var list = repository.AsQueryable().Take(10).ToList();

            Assert.IsNotNull(list, repositoryMessage);
            Assert.Greater(list.Count(), 0, repositoryMessage);
            Assert.IsFalse(list.Any(f => f.DeletedOn != null), repositoryMessage);
        }
Beispiel #12
0
        public void Can_Resolve_Types_Without_Default_Ctor()
        {
            Container ioc = new Container();

            ioc.For <ILogger>().Use <SqlServerLogger>();
            ioc.For <IRepository <Employee> >().Use <SqlRepository <Employee> >();

            IRepository <Employee> repository = ioc.Resolve <IRepository <Employee> >();

            Assert.AreEqual(typeof(SqlRepository <Employee>), repository.GetType());
        }
Beispiel #13
0
        public Attachment(DObject obj, IRepository repository)
        {
            Id = obj.Id;
            var type = repository.GetType(obj.TypeId);

            Title = obj.GetTitle(type);
            Type  = type;
            if (Type.IsProjectFile())
            {
                FileExtension = Path.GetExtension(Title);
            }
        }
Beispiel #14
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="componentIdentifier">Component's identifier</param>
        /// <param name="componentName">Component's name</param>
        /// <param name="repository">The repository responsible to count</param>
        /// <param name="predicate">The predicate</param>
        public AbstractCounter(
            object componentIdentifier,
            string componentName,
            IRepository <T, K> repository,
            Expression <Func <T, bool> > predicate = null)
            : base(componentIdentifier, componentName)
        {
            repository.NotNull(nameof(repository));
            repository.GetType().Is <BaseRepository <T, K, C> >();

            _repository = repository;
            _predicate  = predicate;
        }
Beispiel #15
0
        private static void RemoveExistingRepository(IRepository repository)
        {
            var repositoryInterfaces = repository.GetType().GetInterfaces().Where(i => i.Assembly == Assembly
                                                                                  .GetAssembly(typeof(RepositoryContainer)));

            var existingRepository = _repositories.SingleOrDefault(r => !r.GetType().GetInterfaces().Where(i => i.Assembly == Assembly
                                                                                                           .GetAssembly(typeof(RepositoryContainer))).Except(repositoryInterfaces).Any());

            if (existingRepository != null)
            {
                _repositories.Remove(existingRepository);
            }
        }
Beispiel #16
0
        public static T ByNid <T>(this IRepository <T> repo, int nid)
            where T : ID7Node
        {
            var ret = repo.All.FirstOrDefault(x => x.nid == nid);

            if (ret == null)
            {
                repo.Warn_n($"No nid matching [{nid}].",
                            $"‹{repo.GetType().Name}› : repo for ‹{typeof(T).Name}›.");
            }

            return(ret);
        }
Beispiel #17
0
        private Type GetEditorType(IRepository repository)
        {
            var entryType = repository.GetType().GetInterfaces().FirstOrDefault(item => item.IsGenericType && item.GetInterfaces().Contains(typeof(IRepository)));

            foreach (var item in creators)
            {
                if (entryType.IsSubclassOf(item.Key) || entryType.Equals(item.Key))
                {
                    return(item.Value);
                }
            }

            throw new InvalidOperationException($"{entryType}' type not registered.");
        }
        private void ShouldCheckEntityForExistenceSuccessfully <TEntity>(IRepository <TEntity> repository)
            where TEntity : IEntity
        {
            string  repositoryMessage = string.Format("Failed in {0}.", repository.GetType().Name);
            TEntity entity            = repository.AsQueryable().FirstOrDefault();

            Assert.IsNotNull(entity, repositoryMessage + " Table is empty.");
            bool entityExist = repository.Any(f => f.Id == entity.Id);

            Assert.IsTrue(entityExist, repositoryMessage);
            bool entityNotExist = repository.Any(f => f.Id == -1);

            Assert.IsFalse(entityNotExist, repositoryMessage);
        }
Beispiel #19
0
        /// <summary>
        /// 强制转换指定仓库的数据提供程序为关系数据库的数据提供程。
        /// 如果该仓库的 <see cref="IRepository.DataProvider"/> 不是此类型的子类,则会抛出异常。
        /// </summary>
        /// <param name="repository"></param>
        /// <returns></returns>
        public static RdbDataProvider Get(IRepository repository)
        {
            var dp = repository.DataProvider as RdbDataProvider;

            if (dp == null)
            {
                throw new InvalidProgramException(string.Format(
                                                      "{0} 仓库类型使用的数据提供程序类型是 {1},该类型不能转换为关系数据库的数据提供程序。",
                                                      repository.GetType(),
                                                      repository.DataProvider.GetType()
                                                      ));
            }
            return(dp);
        }
Beispiel #20
0
 private void SendBufferCallback(object state)
 {
     try
     {
         repository.Add((IEnumerable <logEvent>)state, BufferSize);
     }
     catch (Exception ex)
     {
         HandleError($"Failed to addd logEvents to {repository.GetType().Name} in SendBufferCallback", ex);
     }
     finally
     {
         EndAsyncSend();
     }
 }
Beispiel #21
0
 public UnitOfWork(DbContext dbContext,
                   IRepository <User> userRep,
                   IRepository <Document> documentRep,
                   IRepository <Order> orderRep,
                   IRepository <Adress> adressRep,
                   IRepository <EmailConfirmationLink> emailRep
                   )
 {
     _db           = dbContext;
     _repositories = new Dictionary <Type, object>();
     _repositories.Add(userRep.GetType().GenericTypeArguments[0], userRep);
     _repositories.Add(documentRep.GetType().GenericTypeArguments[0], documentRep);
     _repositories.Add(orderRep.GetType().GenericTypeArguments[0], orderRep);
     _repositories.Add(adressRep.GetType().GenericTypeArguments[0], adressRep);
     _repositories.Add(emailRep.GetType().GenericTypeArguments[0], emailRep);
 }
        public BitstampTrader(TimeSpan interval)
        {
            // Ninject
            var kernel = new StandardKernel();

            kernel.Load(Assembly.GetExecutingAssembly());
            _minMaxLogRepository    = kernel.Get <IRepository <MinMaxLog> >();
            _orderRepository        = kernel.Get <IRepository <Order> >();
            _currencyPairRepository = kernel.Get <IRepository <CurrencyPair> >();
            _exchange = kernel.Get <IExchange>();

            if (_currencyPairRepository.GetType() == typeof(MockRepository <CurrencyPair>))
            {
                GenerateMockData();
            }

            Interval = interval;
        }
Beispiel #23
0
        public void EnsurePopulated()
        {
            if (typeof(Repository).IsAssignableFrom(repository.GetType()))
            {
                repository.AddGenres(Genres);
                repository.AddOccasions(Occasions);
                repository.AddMusicians(Musicians);
                logger.LogInformation("Repository populated");
            }
            else
            {
                if (context.Database.GetPendingMigrations().Any())
                {
                    context.Database.Migrate();
                }

                if (context.Musicians.Count() == 0 &&
                    context.Genres.Count() == 0 &&
                    context.Occasions.Count() == 0)
                {
                    logger.LogDebug("Preparing to seed database");

                    context.Genres !.AddRange(Genres);
                    context.SaveChanges();
                    logger.LogDebug("Genres added");

                    context.Occasions !.AddRange(Occasions);
                    context.SaveChanges();
                    logger.LogDebug("Occasions added");

                    context.Musicians !.AddRange(Musicians);
                    context.SaveChanges();
                    logger.LogDebug("Musicians added");

                    logger.LogInformation("Database seeded");
                }
                else
                {
                    logger.LogInformation("Database not seeded");
                }
            }
        }
Beispiel #24
0
        public static void UpdateRecordHash <T>(T entity, IRepository <T> repository)
            where T : class, IEntity
        {
            if (entity == null || repository == null)
            {
                return;
            }
            var task = new Task(() =>
            {
                var tableInfo = TableInfo.GetTableInfo <T>();
                if (entity != null && repository != null && tableInfo.IsIModifyRecord)
                {
                    if (tableInfo.PKList == null || tableInfo.PKList.Count == 0)
                    {
                        //没有主键则不进行更新,以免出错
                        //这里进行记录日志预警
                        return;
                    }
                    var dataDict = EntityUtility.GetEntityDict <T>(entity);
                    if (dataDict == null || dataDict.Count == 0)
                    {
                        return;
                    }
                    string where = "1=1";
                    foreach (var pk in tableInfo.PKList)
                    {
                        if (dataDict.ContainsKey(pk) == false)
                        {
                            return;
                        }
                        where += string.Format(" AND {0}='{1}'", pk, dataDict[pk]);
                    }
                    string hash  = EntityUtility.GetEntityHash <T>(entity);
                    string sql   = string.Format("UPDATE {0} SET RecordHash='{1}' WHERE {2}", tableInfo.TableName, hash, where);
                    var repoType = repository.GetType();
                    var newRepo  = Assembly.GetAssembly(repoType).CreateInstance(repoType.FullName, true, BindingFlags.Public | BindingFlags.Instance, null, new object[] { repository.ConnectionStr }, CultureInfo.CurrentCulture, null) as IRepository <T>;
                    newRepo.ExecuteNonQueryAsync(sql);
                }
            });

            _queue.Enqueue(task);
        }
Beispiel #25
0
        public IActionResult Get()
        {
            _logger.LogDebug("Writing to the log for Echo controller.");

            var routes = GetRouteDetails(RouteData.Routers.OfType <RouteCollection>().FirstOrDefault());

            var info = new
            {
                ServerTimeUTC          = $"{DateTime.UtcNow}",
                ServerName             = Environment.MachineName,
                ExecutingAssembly      = Assembly.GetExecutingAssembly().FullName,
                UserName               = User.Identity.Name ?? "<NotSet>",
                CustomerRepository     = _customerRepo.GetType().AssemblyQualifiedName,
                SettingsRepository     = _settingsRepo.GetType().AssemblyQualifiedName,
                SettingTypesRepository = _settingTypesRepo.GetType().AssemblyQualifiedName,
                Routes = routes
            };

            return(Ok(info));
        }
 /// <summary>
 /// Set's up the <see cref="InMemoryRepository{TItem}"/> to start listen to changes from the given <see cref="InMemoryRepository{TItem}"/>
 /// </summary>
 /// <exception cref="InvalidOperationException">Thrown when the <see cref="IRepository{TItem}"/> registered in DI is not a <see cref="InMemoryRepository{TItem}"/></exception>
 public void Setup()
 {
     if (_repository is InMemoryRepository <TItem> inMemoryRepository)
     {
         inMemoryRepository.Changes += (args) =>
         {
             foreach (TItem changes in args.ItemChanges)
             {
                 foreach (IItemChangeFeedProcessor <TItem> itemChangeFeedProcessor in _changeFeedProcessors)
                 {
                     itemChangeFeedProcessor.HandleAsync(changes, default).AsTask().Wait();
                 }
             }
         };
     }
     else
     {
         throw new InvalidOperationException(
                   $"A repository of type {_repository.GetType().Name} cannot be setup to work with the InMemoryChangeFeed");
     }
 }
        private void ShouldFilterEntitiesByFilterSuccessfully <TEntity>(IRepository <TEntity> repository)
            where TEntity : IEntity
        {
            string repositoryMessage = string.Format("Failed in {0}.", repository.GetType().Name);
            Expression <Func <TEntity, bool> > filter = (f => f.Id > 0);

            IList <TEntity> entities = repository.AsQueryable().Where(filter).ToList();

            Assert.IsNotNull(entities, repositoryMessage + " Table is empty.");
            Assert.Greater(entities.Count, 0, repositoryMessage + " Table is empty.");

            IList <TEntity> entitieViaFilterBy = repository.AsQueryable(filter).ToList();

            Assert.IsNotNull(entitieViaFilterBy);

            Assert.AreEqual(entities.Count, entitieViaFilterBy.Count);
            foreach (TEntity t in entities)
            {
                Assert.AreEqual(t, entitieViaFilterBy.FirstOrDefault(f => f.Id == t.Id),
                                repositoryMessage);
            }
        }
Beispiel #28
0
 /// <summary>
 /// Register a repository with the unit of work
 /// </summary>
 /// <param name="repository">A repository derived from irepository</param>
 public void Register (IRepository repository)
 {
     _repositories.Add(repository.GetType().Name, repository);
 }
Beispiel #29
0
 private void ShowRepositoryType(IRepository <Person, string> repository)
 {
     RepositoryTypeLabel.Content = repository.GetType().FullName;
 }
        /// <summary>
        /// Calls the <see cref="IRepository.Initialize"/> method for a repository
        /// </summary>
        public void InitializeRepository(IRepository repo, Type implementedInterface)
        {
            if (!_repositoryInitializers.ContainsKey(repo.RepositoryType))
            {
                throw new InvalidOperationException($"No initializer found for repository '{repo.GetType().FullName}'");
            }

            _repositoryInitializers[repo.RepositoryType].InitializeRepository(this, repo, implementedInterface);
        }
Beispiel #31
0
        internal void RefreshWorkers()
        {
            List <WorkerRecord> records;

            using (IRepository repository = this.repositoryFactory.Create())
            {
                records = repository.GetWorkers(this.applicationName, this.address, this.name, null).ToList();

                this.logger.Debug(
                    "Machine {0} ({1}) loaded {2} worker records from repository '{3}', using connection string '{4}'.",
                    this.name,
                    this.address,
                    records.Count,
                    repository.GetType().ToString(),
                    repository.ConnectionString);
            }

            lock (this)
            {
                List <Worker> newWorkers    = new List <Worker>();
                List <Worker> removeWorkers = new List <Worker>();

                // Figure out which of the current workers get to stay alive.
                foreach (Worker worker in this.workers)
                {
                    WorkerRecord record = records.Where(r => r.Id == worker.Id).FirstOrDefault();

                    if (record != null)
                    {
                        newWorkers.Add(worker);
                        records.Remove(record);
                    }
                    else
                    {
                        removeWorkers.Add(worker);
                    }
                }

                // Prune orphaned current workers.
                foreach (Worker worker in removeWorkers)
                {
                    try
                    {
                        worker.Dispose();
                    }
                    catch (Exception ex)
                    {
                        this.logger.Error(ex);
                    }
                }

                // Create workers for all of the new records. Records corresponding
                // to existing workers where pruned earlier.
                foreach (WorkerRecord record in records)
                {
                    Worker worker = null;

                    try
                    {
                        worker = new Worker(
                            this.applicationName,
                            record.Id.Value,
                            record.Name,
                            QueueNameFilters.Parse(record.QueueNames),
                            this.workerHeartbeat,
                            this.schedulerEnabled,
                            this.repositoryFactory,
                            this.logger);

                        newWorkers.Add(worker);

                        if (record.Status == WorkerStatus.Working || record.Startup == WorkerStartupType.Automatic)
                        {
                            worker.Start();
                        }
                    }
                    catch (Exception ex)
                    {
                        if (worker != null)
                        {
                            newWorkers.Remove(worker);
                            worker.Dispose();
                        }

                        this.logger.Error(ex);
                    }
                }

                // Ensure a default worker if necessary.
                if (newWorkers.Count == 0 && this.ensureDefaultWorker)
                {
                    Worker worker = this.CreateDefaultWorker();
                    newWorkers.Add(worker);
                    worker.Start();
                }

                this.workers = newWorkers;
                this.logger.Debug("Machine {0} ({1}) refreshed its worker list and is now tracking {2} workers.", this.name, this.address, this.workers.Count);
            }
        }
Beispiel #32
0
        public IEnumerable <TObject> GetLookup <TObject>(string identifier) where TObject : class
        {
            IRepository <TObject> repo = Unit.GetRepositoryFor <TObject>();

            if (identifier.Contains("__"))
            {
                string collectionId = identifier.GetAfterLast("__");

                if (!(repo is ICollectionRepository <TObject>))
                {
                    throw new CodeShellHttpException(HttpStatusCode.ServiceUnavailable, $"Repository {repo.GetType().Name} must implement ICollectionRepository<{typeof(T).Name}> to use collections");
                }

                var AsgaRepo = (ICollectionRepository <TObject>)repo;

                return(AsgaRepo.GetCollectionList(collectionId));
            }
            else
            {
                return(repo.Find(e => true));
            }
        }
Beispiel #33
0
 /// <summary>
 /// 强制转换指定仓库的数据提供程序为关系数据库的数据提供程。
 /// 如果该仓库的 <see cref="IRepository.DataProvider"/> 不是此类型的子类,则会抛出异常。
 /// </summary>
 /// <param name="repository"></param>
 /// <returns></returns>
 public static RdbDataProvider Get(IRepository repository)
 {
     var dp = repository.DataProvider as RdbDataProvider;
     if (dp == null)
     {
         throw new InvalidProgramException(string.Format(
             "{0} 仓库类型使用的数据提供程序类型是 {1},该类型不能转换为关系数据库的数据提供程序。",
             repository.GetType(),
             repository.DataProvider.GetType()
             ));
     }
     return dp;
 }
Beispiel #34
0
 public IUnitOfWork GetUnit(IRepository repo)
 {
     Type tipo = factory[repo.GetType().Name];
     return (IUnitOfWork)Activator.CreateInstance(tipo);
 }