<PackageReference Include="Polly" Version="8.6.2" />

PolicyRegistry

Stores a registry of String and policy pairs.
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; namespace Polly.Registry { public class PolicyRegistry : IConcurrentPolicyRegistry<string>, IPolicyRegistry<string>, IReadOnlyPolicyRegistry<string>, IEnumerable<KeyValuePair<string, IsPolicy>>, IEnumerable { private readonly ConcurrentDictionary<string, IsPolicy> _registry = new ConcurrentDictionary<string, IsPolicy>(); public int Count => _registry.Count; public IsPolicy this[string key] { get { return _registry[key]; } set { _registry[key] = value; } } public PolicyRegistry() { } internal PolicyRegistry(IDictionary<string, IsPolicy> registry) { _registry = new ConcurrentDictionary<string, IsPolicy>(registry); } public void Add<TPolicy>(string key, TPolicy policy) where TPolicy : IsPolicy { ((IDictionary<string, IsPolicy>)_registry).Add(key, (IsPolicy)(object)policy); } public bool TryAdd<TPolicy>(string key, TPolicy policy) where TPolicy : IsPolicy { return _registry.TryAdd(key, (IsPolicy)(object)policy); } public TPolicy Get<TPolicy>(string key) where TPolicy : IsPolicy { return (TPolicy)_registry[key]; } public bool TryGet<TPolicy>(string key, out TPolicy policy) where TPolicy : IsPolicy { policy = default(TPolicy); IsPolicy value; bool num = _registry.TryGetValue(key, out value); if (num) policy = (TPolicy)value; return num; } public void Clear() { _registry.Clear(); } public bool ContainsKey(string key) { return _registry.ContainsKey(key); } public bool Remove(string key) { return ((IDictionary<string, IsPolicy>)_registry).Remove(key); } public bool TryRemove<TPolicy>(string key, out TPolicy policy) where TPolicy : IsPolicy { policy = default(TPolicy); IsPolicy value; bool num = _registry.TryRemove(key, out value); if (num) policy = (TPolicy)value; return num; } public bool TryUpdate<TPolicy>(string key, TPolicy newPolicy, TPolicy comparisonPolicy) where TPolicy : IsPolicy { return _registry.TryUpdate(key, (IsPolicy)(object)newPolicy, (IsPolicy)(object)comparisonPolicy); } public TPolicy GetOrAdd<TPolicy>(string key, Func<string, TPolicy> policyFactory) where TPolicy : IsPolicy { return (TPolicy)_registry.GetOrAdd(key, (Func<string, IsPolicy>)((string k) => (IsPolicy)(object)policyFactory(k))); } public TPolicy GetOrAdd<TPolicy>(string key, TPolicy policy) where TPolicy : IsPolicy { return (TPolicy)_registry.GetOrAdd(key, (IsPolicy)(object)policy); } public TPolicy AddOrUpdate<TPolicy>(string key, Func<string, TPolicy> addPolicyFactory, Func<string, TPolicy, TPolicy> updatePolicyFactory) where TPolicy : IsPolicy { return (TPolicy)_registry.AddOrUpdate(key, (Func<string, IsPolicy>)((string k) => (IsPolicy)(object)addPolicyFactory(k)), (Func<string, IsPolicy, IsPolicy>)((string k, IsPolicy e) => (IsPolicy)(object)updatePolicyFactory(k, (TPolicy)e))); } public TPolicy AddOrUpdate<TPolicy>(string key, TPolicy addPolicy, Func<string, TPolicy, TPolicy> updatePolicyFactory) where TPolicy : IsPolicy { return (TPolicy)_registry.AddOrUpdate(key, (IsPolicy)(object)addPolicy, (Func<string, IsPolicy, IsPolicy>)((string k, IsPolicy e) => (IsPolicy)(object)updatePolicyFactory(k, (TPolicy)e))); } public IEnumerator<KeyValuePair<string, IsPolicy>> GetEnumerator() { return _registry.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }