From 597d7d58891172594857b58caa02a659e53c788f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 5 Jul 2023 14:56:50 +0300 Subject: [PATCH] Add additional assemblies as potential application parts --- .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 17 +++++++++++------ .../Volo/Abp/Modularity/AbpModuleDescriptor.cs | 2 +- .../Modularity/AbpModuleDescriptorExtensions.cs | 15 +++++++++++++++ .../Volo/Abp/Modularity/AbpModuleHelper.cs | 4 ++-- .../Volo/Abp/Modularity/IAbpModuleDescriptor.cs | 4 ++-- .../Volo/Abp/Modularity/ModuleLoader_Tests.cs | 2 +- .../Volo/Abp/Reflection/AssemblyFinder_Tests.cs | 2 +- 7 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptorExtensions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 0e93bb7ec6..c9b5984843 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -227,18 +227,16 @@ public class AbpAspNetCoreMvcModule : AbpModule return; } - //Plugin modules - var moduleAssemblies = context - .ServiceProvider - .GetRequiredService() + var moduleContainer = context.ServiceProvider.GetRequiredService(); + + var plugInModuleAssemblies = moduleContainer .Modules .Where(m => m.IsLoadedAsPlugIn) .SelectMany(m => m.AllAssemblies) .Distinct(); - AddToApplicationParts(partManager, moduleAssemblies); + AddToApplicationParts(partManager, plugInModuleAssemblies); - //Controllers for application services var controllerAssemblies = context .ServiceProvider .GetRequiredService>() @@ -249,6 +247,13 @@ public class AbpAspNetCoreMvcModule : AbpModule .Distinct(); AddToApplicationParts(partManager, controllerAssemblies); + + var additionalAssemblies = moduleContainer + .Modules + .SelectMany(m => m.GetAdditionalAssemblies()) + .Distinct(); + + AddToApplicationParts(partManager, additionalAssemblies); } private static void AddToApplicationParts(ApplicationPartManager partManager, IEnumerable moduleAssemblies) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs index d10e858377..9bcb7d6a06 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs @@ -12,7 +12,7 @@ public class AbpModuleDescriptor : IAbpModuleDescriptor public Assembly Assembly { get; } - public List AllAssemblies { get; } + public Assembly[] AllAssemblies { get; } public IAbpModule Instance { get; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptorExtensions.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptorExtensions.cs new file mode 100644 index 0000000000..d2e719efb0 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptorExtensions.cs @@ -0,0 +1,15 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace Volo.Abp.Modularity; + +public static class AbpModuleDescriptorExtensions +{ + public static Assembly[] GetAdditionalAssemblies(this IAbpModuleDescriptor module) + { + return module.AllAssemblies.Length <= 1 + ? Array.Empty() + : module.AllAssemblies.Where(x => x != module.Assembly).ToArray(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs index 8336433994..eb72664444 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs @@ -37,7 +37,7 @@ internal static class AbpModuleHelper return dependencies; } - public static List GetAllAssemblies(Type moduleType) + public static Assembly[] GetAllAssemblies(Type moduleType) { var assemblies = new List(); @@ -55,7 +55,7 @@ internal static class AbpModuleHelper assemblies.Add(moduleType.Assembly); - return assemblies; + return assemblies.ToArray(); } private static void AddModuleAndDependenciesRecursively( diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs index 472009bfb3..8690baa33d 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs @@ -21,7 +21,7 @@ public interface IAbpModuleDescriptor /// Includes the main and other assemblies defined /// on the module using the attribute. /// - List AllAssemblies { get; } + Assembly[] AllAssemblies { get; } /// /// The instance of the module class (singleton). @@ -38,4 +38,4 @@ public interface IAbpModuleDescriptor /// A module can depend on another module using the attribute. /// IReadOnlyList Dependencies { get; } -} +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Modularity/ModuleLoader_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Modularity/ModuleLoader_Tests.cs index d06025302d..941465b814 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Modularity/ModuleLoader_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Modularity/ModuleLoader_Tests.cs @@ -22,7 +22,7 @@ public class ModuleLoader_Tests modules[0].Type.ShouldBe(typeof(IndependentEmptyModule)); modules[1].Type.ShouldBe(typeof(MyStartupModule)); modules[1].Assembly.ShouldBe(typeof(MyStartupModule).Assembly); - modules[1].AllAssemblies.Count.ShouldBe(2); + modules[1].AllAssemblies.Length.ShouldBe(2); modules[1].AllAssemblies[0].ShouldBe(typeof(IAbpApplication).Assembly); modules[1].AllAssemblies[1].ShouldBe(typeof(MyStartupModule).Assembly); } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs index f3086dcb8c..edf44d5338 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs @@ -51,7 +51,7 @@ public class AssemblyFinder_Tests { var moduleDescriptor = Substitute.For(); moduleDescriptor.Type.Returns(moduleType); - moduleDescriptor.AllAssemblies.Returns(new List { moduleType.Assembly }); + moduleDescriptor.AllAssemblies.Returns(new [] { moduleType.Assembly }); return moduleDescriptor; } }