/// <summary> /// 获取模块的依赖根 /// </summary> /// <param name="sortedModuleCount">排序后的模块数量</param> /// <param name="dependencyRootCount">依赖根的数量</param> /// <param name="types"></param> /// <returns></returns> private static IModuleDescriptor[] GetModuleDependencyRoots(int sortedModuleCount, int dependencyRootCount, params Type[] types) { var moduleDependencyRoots = AppModuleDependencyUtil.GetModuleDependencyRoots(types); if (dependencyRootCount >= 0) { Assert.AreEqual(dependencyRootCount, moduleDependencyRoots.Length); DependencyLinkCheck(moduleDependencyRoots); } Console.WriteLine($"\r\n---------Mermaid DependencyRoots Start----------\r\n{moduleDependencyRoots.ToMermaidString()}\r\n---------Mermaid DependencyRoots End----------\r\n"); var allModuleDescriptors = AppModuleDependencyUtil.FindAllDependedModuleDescriptors(types); Console.WriteLine($"\r\n---------Mermaid allModuleDescriptors Start----------\r\n{allModuleDescriptors.ToMermaidString()}\r\n---------Mermaid allModuleDescriptors End----------\r\n"); var sortedModuleDescriptors = AppModuleDependencyUtil.SortModuleDescriptors(allModuleDescriptors); if (sortedModuleCount >= 0) { Assert.AreEqual(sortedModuleCount, sortedModuleDescriptors.Length); DependencyLinkCheck(allModuleDescriptors); } Console.WriteLine($"\r\n---------sortedModuleTypes Start----------\r\n{string.Join("\r\n", sortedModuleDescriptors.Select(m => m.Type.Name))}\r\n---------sortedModuleTypes End----------\r\n"); return(moduleDependencyRoots); }
static void Main(string[] args) { var module3Path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SampleModule3.dll"); var module5Directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins"); var abpModuleDescriptors = AppModuleDependencyUtil.FindAllDependedModuleDescriptors(typeof(Volo.Abp.Json.AbpJsonModule), new AbpAdaptedModuleDescriptorBuilder()); var mermaidString = abpModuleDescriptors.ToMermaidString(type => type.IsGenericType ? type.GenericTypeArguments[0].FullName : type.FullName); Console.WriteLine($"\r\n---------Mermaid DependencyRoots Start----------\r\n{mermaidString}\r\n---------Mermaid DependencyRoots End----------\r\n"); var abpModuleSource = new TypeModuleSource(typeof(Volo.Abp.Json.AbpJsonModule)) { DescriptorBuilder = new AbpAdaptedModuleDescriptorBuilder() }; //直接在HostBuilder加载,或者使用ConfigureServices进行加载 Host.CreateDefaultBuilder(args) .LoadModule <AdaptSampleModule>() .LoadModuleFile(module3Path) //从文件加载 .LoadModule(abpModuleSource) .LoadModuleDirectory(source => { source.SearchDepth = 5; //设置文件夹搜索深度 }, module5Directory) //从文件夹加载 .UseConsoleLifetime() .InitializationModules() .Run(); }
public void LoadIntoServices() { Assembly assembly = GetSampleModule1Assembly(); Services.LoadModule(new AssemblyModuleSource(assembly), options => options.AddModuleAsService = true).ModuleLoadComplete(); var modules = AppModuleDependencyUtil.FindAllDependedModuleDescriptors(assembly.GetTypes().FirstOrDefault(m => typeof(IAppModule).IsAssignableFrom(m))); var sortedModules = AppModuleDependencyUtil.SortModuleDescriptors(modules); foreach (var module in sortedModules) { Assert.IsTrue(Services.Any(m => m.ServiceType == module.Type)); } }