From 7372f0a2e8e5f023644fee8d4b75de3ffe8c0c41 Mon Sep 17 00:00:00 2001 From: Eugene Sadovoi Date: Sat, 11 Nov 2017 20:03:29 -0500 Subject: [PATCH] Refactoring to allow removing of HierarchicalLifetimeStrategy --- package.props | 2 +- src/Lifetime/HierarchicalLifetimeManager.cs | 6 +++ src/Lifetime/IHierarchicalLifetimePolicy.cs | 9 +++- src/Registration/IIndexerOf.cs | 9 ++++ src/Utility/Prime.cs | 49 +++++++++++++++++++++ 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/Registration/IIndexerOf.cs create mode 100644 src/Utility/Prime.cs diff --git a/package.props b/package.props index d9d97d27..1a71a8ee 100644 --- a/package.props +++ b/package.props @@ -1,7 +1,7 @@ - 2.1.2 + 2.2.0 This package is distributed as .NET Standard 1.0, 2.0, .Net Core 1.0 and .NET 4.0, 4.5, 4.7 diff --git a/src/Lifetime/HierarchicalLifetimeManager.cs b/src/Lifetime/HierarchicalLifetimeManager.cs index 4e481a7d..1d266fc4 100644 --- a/src/Lifetime/HierarchicalLifetimeManager.cs +++ b/src/Lifetime/HierarchicalLifetimeManager.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System; +using Unity.Policy; namespace Unity.Lifetime { @@ -22,6 +23,11 @@ public override void RemoveValue() Dispose(); } + public IBuilderPolicy CreateScope() + { + return new HierarchicalLifetimeManager(); + } + #region IDisposable diff --git a/src/Lifetime/IHierarchicalLifetimePolicy.cs b/src/Lifetime/IHierarchicalLifetimePolicy.cs index 74e1b83d..9d3632aa 100644 --- a/src/Lifetime/IHierarchicalLifetimePolicy.cs +++ b/src/Lifetime/IHierarchicalLifetimePolicy.cs @@ -1,6 +1,13 @@ -namespace Unity.Lifetime +using Unity.Policy; + +namespace Unity.Lifetime { public interface IHierarchicalLifetimePolicy : ILifetimePolicy { + /// + /// Creates controller for current scope + /// + /// IScopeLifetimePolicy + IBuilderPolicy CreateScope(); } } diff --git a/src/Registration/IIndexerOf.cs b/src/Registration/IIndexerOf.cs new file mode 100644 index 00000000..2ac68f2a --- /dev/null +++ b/src/Registration/IIndexerOf.cs @@ -0,0 +1,9 @@ + +namespace Unity.Registration +{ + public interface IIndexerOf + { + TValue this[TKey index] { get; set; } + } + +} diff --git a/src/Utility/Prime.cs b/src/Utility/Prime.cs new file mode 100644 index 00000000..4a0b2fc4 --- /dev/null +++ b/src/Utility/Prime.cs @@ -0,0 +1,49 @@ +using System; + +namespace Unity.Utility +{ + public static class Prime + { + public static readonly int[] Numbers = { + 1, 3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, + 353, 431, 521, 631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, + 4861, 5839, 7013, 8419, 10103, 12143, 14591, 17519, 21023, 25229, 30293, 36353, + 43627, 52361, 62851, 75431, 90523, 108631, 130363, 156437, 187751, 225307, 270371, + 324449, 389357, 467237, 560689, 672827, 807403, 968897, 1162687, 1395263, 1674319, + 2009191, 2411033, 2893249, 3471899, 4166287, 4999559, 5999471, 7199369, 10000019}; + + + public static int GetPrime(int min) + { + if (min < 0) throw new ArgumentException("Capacity Overflow"); + + foreach (var prime in Numbers) + { + if (prime >= min) return prime; + } + + for (var i = min | 1; i < Int32.MaxValue; i += 2) + { + if (IsPrime(i) && (i - 1) % 101 != 0) + return i; + } + + return min; + } + + public static bool IsPrime(int candidate) + { + if ((candidate & 1) != 0) + { + var limit = (int)Math.Sqrt(candidate); + for (var divisor = 3; divisor <= limit; divisor += 2) + { + if (candidate % divisor == 0) + return false; + } + return true; + } + return candidate == 2; + } + } +}