Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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));
            }
        }