diff --git a/src/Umbraco.Core/Composing/TypeFinder.cs b/src/Umbraco.Core/Composing/TypeFinder.cs index 3ac826880c..5925d3dab1 100644 --- a/src/Umbraco.Core/Composing/TypeFinder.cs +++ b/src/Umbraco.Core/Composing/TypeFinder.cs @@ -21,7 +21,7 @@ public class TypeFinder : ITypeFinder /// its an exact name match /// NOTE this means that "foo." will NOT exclude "foo.dll" but only "foo.*.dll" /// - internal static readonly string[] KnownAssemblyExclusionFilter = + internal static string[] KnownAssemblyExclusionFilter = { "mscorlib,", "netstandard,", "System,", "Antlr3.", "AutoMapper,", "AutoMapper.", "Autofac,", // DI "Autofac.", "AzureDirectory,", "Castle.", // DI, tests @@ -49,11 +49,20 @@ public class TypeFinder : ITypeFinder private string[]? _assembliesAcceptingLoadExceptions; private volatile HashSet? _localFilteredAssemblyCache; + [Obsolete("Please use the constructor taking all parameters. This constructor will be removed in V14.")] public TypeFinder(ILogger logger, IAssemblyProvider assemblyProvider, ITypeFinderConfig? typeFinderConfig = null) + : this(logger, assemblyProvider, null, typeFinderConfig) + { } + + public TypeFinder(ILogger logger, IAssemblyProvider assemblyProvider, string[]? additionalExlusionAssemblies, ITypeFinderConfig? typeFinderConfig = null) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _assemblyProvider = assemblyProvider; _typeFinderConfig = typeFinderConfig; + if (additionalExlusionAssemblies is not null) + { + KnownAssemblyExclusionFilter = KnownAssemblyExclusionFilter.Union(additionalExlusionAssemblies).ToArray(); + } } /// diff --git a/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs b/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs index f281bbc31a..70df241ca1 100644 --- a/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs @@ -22,4 +22,9 @@ public class TypeFinderSettings /// scanning for plugins based on different root referenced assemblies you can add the assembly name to this list. /// public IEnumerable? AdditionalEntryAssemblies { get; set; } + + /// + /// Gets or sets a value for the assemblies that will be excluded from scanning. + /// + public string[] AdditionalAssemblyExclusionEntries { get; set; } = Array.Empty(); } diff --git a/src/Umbraco.Web.Common/Extensions/ServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/ServiceCollectionExtensions.cs index 62ede3ce18..581508ecf6 100644 --- a/src/Umbraco.Web.Common/Extensions/ServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/ServiceCollectionExtensions.cs @@ -208,6 +208,7 @@ public static class ServiceCollectionExtensions var typeFinder = new TypeFinder( loggerFactory.CreateLogger(), assemblyProvider, + typeFinderSettings.AdditionalAssemblyExclusionEntries, typeFinderConfig); var typeLoader = new TypeLoader(typeFinder, loggerFactory.CreateLogger());