protected double?GetTransactionalLimitRate(DateTime limitDate, TransactionDateLimit limit) { ReaderWriterLockSlim _slimLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); _slimLock.EnterReadLock(); double?_rate = limit.DefaultRate; //transactions.Where(x=> (date - x.Date).TotalDays >= 10).Where(y=> y.Type == limit.Type).First() foreach (var transaction in this.Transactions) { if (transaction.Type == limit.TransactionType) { if ((limitDate - transaction.Date).TotalDays <= limit.PastDuration) { _rate = limit.LimitRate; } } } if (_slimLock.IsReadLockHeld) { _slimLock.ExitReadLock(); } return(_rate); }
// This is better to be exposed to the external runner. The user of the library should identify the rates rules. protected override void RegisterRateProviders() { IRateLimit limit = new TransactionDateLimit(TransactionType.Withdraw, 10, 0.05, 0.001); this.RateLimits.Add(limit); }