Browse Source

Add additional assemblies as potential application parts

pull/17048/head
Halil İbrahim Kalkan 3 years ago
parent
commit
597d7d5889
  1. 17
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
  2. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs
  3. 15
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptorExtensions.cs
  4. 4
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs
  5. 4
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs
  6. 2
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/Modularity/ModuleLoader_Tests.cs
  7. 2
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs

17
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<IModuleContainer>()
var moduleContainer = context.ServiceProvider.GetRequiredService<IModuleContainer>();
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<IOptions<AbpAspNetCoreMvcOptions>>()
@ -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<Assembly> moduleAssemblies)

2
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleDescriptor.cs

@ -12,7 +12,7 @@ public class AbpModuleDescriptor : IAbpModuleDescriptor
public Assembly Assembly { get; }
public List<Assembly> AllAssemblies { get; }
public Assembly[] AllAssemblies { get; }
public IAbpModule Instance { get; }

15
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<Assembly>()
: module.AllAssemblies.Where(x => x != module.Assembly).ToArray();
}
}

4
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModuleHelper.cs

@ -37,7 +37,7 @@ internal static class AbpModuleHelper
return dependencies;
}
public static List<Assembly> GetAllAssemblies(Type moduleType)
public static Assembly[] GetAllAssemblies(Type moduleType)
{
var assemblies = new List<Assembly>();
@ -55,7 +55,7 @@ internal static class AbpModuleHelper
assemblies.Add(moduleType.Assembly);
return assemblies;
return assemblies.ToArray();
}
private static void AddModuleAndDependenciesRecursively(

4
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModuleDescriptor.cs

@ -21,7 +21,7 @@ public interface IAbpModuleDescriptor
/// Includes the main <see cref="Assembly"/> and other assemblies defined
/// on the module <see cref="Type"/> using the <see cref="AdditionalAssemblyAttribute"/> attribute.
/// </summary>
List<Assembly> AllAssemblies { get; }
Assembly[] AllAssemblies { get; }
/// <summary>
/// The instance of the module class (singleton).
@ -38,4 +38,4 @@ public interface IAbpModuleDescriptor
/// A module can depend on another module using the <see cref="DependsOnAttribute"/> attribute.
/// </summary>
IReadOnlyList<IAbpModuleDescriptor> Dependencies { get; }
}
}

2
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);
}

2
framework/test/Volo.Abp.Core.Tests/Volo/Abp/Reflection/AssemblyFinder_Tests.cs

@ -51,7 +51,7 @@ public class AssemblyFinder_Tests
{
var moduleDescriptor = Substitute.For<IAbpModuleDescriptor>();
moduleDescriptor.Type.Returns(moduleType);
moduleDescriptor.AllAssemblies.Returns(new List<Assembly> { moduleType.Assembly });
moduleDescriptor.AllAssemblies.Returns(new [] { moduleType.Assembly });
return moduleDescriptor;
}
}

Loading…
Cancel
Save