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