From b7a15bc0051f4a3a904ed5ebea6b0b93c773f43e Mon Sep 17 00:00:00 2001 From: glucaci Date: Fri, 26 Jan 2024 14:09:05 +0100 Subject: [PATCH] Add posibility to exclude namespaces --- .../Internal/DependencyTypesResolverTests.cs | 3 +-- src/Context/IMongoDatabaseBuilder.cs | 2 +- src/Context/Internal/DependencyTypesResolver.cs | 12 ++++++------ src/Context/Internal/MongoDatabaseBuilder.cs | 4 ++-- src/Context/TypeObjectSerializer.cs | 4 ++-- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Context.Tests/Internal/DependencyTypesResolverTests.cs b/src/Context.Tests/Internal/DependencyTypesResolverTests.cs index 415eca2..357d227 100644 --- a/src/Context.Tests/Internal/DependencyTypesResolverTests.cs +++ b/src/Context.Tests/Internal/DependencyTypesResolverTests.cs @@ -14,8 +14,7 @@ public void GetAllowedTypesByDependencies_All_Successful() // Act IEnumerable knownNamespaces = DependencyTypesResolver - .GetAllowedTypesByDependencies() - .Except(new[] { "Coverlet" }) + .GetAllowedTypesByDependencies(new[] { "Coverlet" }) .OrderBy(x => x); // Assert diff --git a/src/Context/IMongoDatabaseBuilder.cs b/src/Context/IMongoDatabaseBuilder.cs index b6355d9..4a20ad3 100644 --- a/src/Context/IMongoDatabaseBuilder.cs +++ b/src/Context/IMongoDatabaseBuilder.cs @@ -34,6 +34,6 @@ public interface IMongoDatabaseBuilder IMongoDatabaseBuilder AddAllowedTypes(params string[] allowedNamespaces); - IMongoDatabaseBuilder AddAllowedTypesOfAllDependencies(); + IMongoDatabaseBuilder AddAllowedTypesOfAllDependencies(params string[] excludeNamespaces); } } diff --git a/src/Context/Internal/DependencyTypesResolver.cs b/src/Context/Internal/DependencyTypesResolver.cs index d162291..bbb1859 100644 --- a/src/Context/Internal/DependencyTypesResolver.cs +++ b/src/Context/Internal/DependencyTypesResolver.cs @@ -6,34 +6,34 @@ namespace MongoDB.Extensions.Context; -internal class DependencyTypesResolver +internal static class DependencyTypesResolver { private static readonly HashSet _notAllowedNames = new HashSet{ "System", "Microsoft" }; - public static HashSet GetAllowedTypesByDependencies() + internal static HashSet GetAllowedTypesByDependencies(string[] excludeNamespaces) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); IEnumerable allowedAssemblies = assemblies - .Where(assembly => IsNamespaceAllowed(assembly.GetName().Name)); + .Where(assembly => IsNamespaceAllowed(assembly.GetName().Name, excludeNamespaces)); IEnumerable namespaces = allowedAssemblies .SelectMany(a => a.GetTypes()) .Select(type => type.GetRootNamespace()) - .Where(name => IsNamespaceAllowed(name)); + .Where(name => IsNamespaceAllowed(name, excludeNamespaces)); return new HashSet(namespaces); } - private static bool IsNamespaceAllowed(string name) + private static bool IsNamespaceAllowed(string name, string [] excludeNamespaces) { if(string.IsNullOrEmpty(name)) { return false; } - return !_notAllowedNames + return !_notAllowedNames.Concat(excludeNamespaces) .Any(entry => name.StartsWith(entry)); } } diff --git a/src/Context/Internal/MongoDatabaseBuilder.cs b/src/Context/Internal/MongoDatabaseBuilder.cs index 34d8bbe..ca42fd5 100644 --- a/src/Context/Internal/MongoDatabaseBuilder.cs +++ b/src/Context/Internal/MongoDatabaseBuilder.cs @@ -71,9 +71,9 @@ public IMongoDatabaseBuilder AddAllowedTypes(params string[] allowedNamespaces) return this; } - public IMongoDatabaseBuilder AddAllowedTypesOfAllDependencies() + public IMongoDatabaseBuilder AddAllowedTypesOfAllDependencies(params string[] excludeNamespaces) { - TypeObjectSerializer.AddAllowedTypesOfAllDependencies(); + TypeObjectSerializer.AddAllowedTypesOfAllDependencies(excludeNamespaces); return this; } diff --git a/src/Context/TypeObjectSerializer.cs b/src/Context/TypeObjectSerializer.cs index 14db994..1cf0da9 100644 --- a/src/Context/TypeObjectSerializer.cs +++ b/src/Context/TypeObjectSerializer.cs @@ -55,10 +55,10 @@ public static void AddAllowedTypes(params string[] allowedNamespaces) } } - public static void AddAllowedTypesOfAllDependencies() + public static void AddAllowedTypesOfAllDependencies(params string[] excludeNamespaces) { _allowedTypesByDependencies - .UnionWith(DependencyTypesResolver.GetAllowedTypesByDependencies()); + .UnionWith(DependencyTypesResolver.GetAllowedTypesByDependencies(excludeNamespaces)); } internal static void Clear()