public void ShouldForwardValuesToModuleInfo()
        {
            ModuleInfoGroup group = new ModuleInfoGroup();
            group.Ref = "MyCustomGroupRef";
            ModuleInfo moduleInfo = new ModuleInfo();
            Assert.IsNull(moduleInfo.Ref);

            group.Add(moduleInfo);

            Assert.AreEqual(group.Ref, moduleInfo.Ref);
        }
        public void ShouldForwardValuesToModuleInfo()
        {
            ModuleInfoGroup group = new ModuleInfoGroup();

            group.Ref = "MyCustomGroupRef";
            ModuleInfo moduleInfo = new ModuleInfo();

            Assert.IsNull(moduleInfo.Ref);

            group.Add(moduleInfo);

            Assert.AreEqual(group.Ref, moduleInfo.Ref);
        }
        /// <summary>
        /// Adds a new module that is statically referenced to the specified module info group.
        /// </summary>
        /// <param name="moduleInfoGroup">The group where to add the module info in.</param>
        /// <param name="moduleName">The name for the module.</param>
        /// <param name="moduleType">The type for the module. This type should be a descendant of <see cref="IModule"/>.</param>
        /// <param name="dependsOn">The names for the modules that this module depends on.</param>
        /// <returns>Returns the instance of the passed in module info group, to provide a fluid interface.</returns>
        public static ModuleInfoGroup AddModule(this ModuleInfoGroup moduleInfoGroup, string moduleName, Type moduleType, params string[] dependsOn)
        {
            if (moduleType == null)
            {
                throw new ArgumentNullException(nameof(moduleType));
            }
            if (moduleInfoGroup == null)
            {
                throw new ArgumentNullException(nameof(moduleInfoGroup));
            }

            var moduleInfo = new ModuleInfo(moduleName, moduleType.AssemblyQualifiedName);

            moduleInfo.DependsOn.AddRange(dependsOn);
            moduleInfoGroup.Add(moduleInfo);
            return(moduleInfoGroup);
        }
Esempio n. 4
0
        public virtual ModuleCatalog AddGroup(InitializationMode initializationMode, string refValue, params ModuleInfo[] moduleInfos)
        {
            Argument.IsNotNullOrEmptyArray("moduleInfos", moduleInfos);

            Log.Debug("Initializing module group");
            var newGroup = new ModuleInfoGroup {
                InitializationMode = initializationMode, Ref = refValue
            };

            foreach (var info in moduleInfos)
            {
                Log.Debug("Adding a module {0} to module group", info.ModuleName);

                newGroup.Add(info);
            }

            Items.Add(newGroup);

            return(this);
        }
Esempio n. 5
0
        protected override void ConfigureModuleCatalog()
        {
            //读取配置文件
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + "config.xml");
            //共享程序,优先加载
            var shareNodes = doc.SelectNodes("ROOT/Share/ModuleInfo");

            foreach (XmlNode item in shareNodes)
            {
                shareModule.Add(new ModuleInfo()
                {
                    ModuleName = item.Attributes["ModuleName"].InnerText, ModuleType = item.Attributes["ModuleType"].InnerText
                });
            }

            var appNode         = doc.SelectNodes("ROOT/APP/ModuleInfoGroup");
            var listModulegroup = new List <string>();

            foreach (XmlNode item in appNode)
            {
                listModulegroup.Add(item.InnerText);
            }

            appNode = doc.SelectNodes("ROOT/ModuleInfoGroup");
            var list = new List <XmlNode>(); //本系统使用 程序集组

            foreach (XmlNode item in appNode)
            {
                var moduleName = item.Attributes["key"].InnerText;
                if (listModulegroup.Contains(moduleName))
                {
                    list.Add(item);
                }
            }
            //扫描 每个程序集组
            foreach (XmlNode item in list)
            {
                ModuleInfoGroup group = new ModuleInfoGroup()
                {
                    InitializationMode = InitializationMode.WhenAvailable
                };
                //解析 模块的共享程序集
                var shareModuleNode = item.SelectNodes("Share/ModuleInfo");
                foreach (XmlNode node in shareModuleNode)
                {
                    group.Add(new ModuleInfo()
                    {
                        ModuleName = node.Attributes["ModuleName"].InnerText, ModuleType = node.Attributes["ModuleType"].InnerText, InitializationMode = InitializationMode.OnDemand
                    });
                }

                var moduleNodes = item.SelectNodes("ModuleInfo");
                foreach (XmlNode modulenode in moduleNodes)
                {
                    var localModule = new ModuleInfo()
                    {
                        ModuleName = modulenode.Attributes["ModuleName"].InnerText, ModuleType = modulenode.Attributes["ModuleType"].InnerText, InitializationMode = InitializationMode.WhenAvailable
                    };
                    //解析模块的依赖项目
                    foreach (XmlNode depentnode in modulenode.SelectNodes("DependentModules/Module"))
                    {
                        localModule.DependsOn.Add(depentnode.InnerText.Trim());
                    }
                    group.Add(localModule);
                }
                //加入 队列
                modulegroup.Add(group);
            }
        }