/// <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="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> /// <remarks>The name of the module will be the type name.</remarks> public static ModuleInfoGroup AddModule(this ModuleInfoGroup moduleInfoGroup, Type moduleType, params string[] dependsOn) { if (moduleType == null) { throw new ArgumentNullException(nameof(moduleType)); } return(AddModule(moduleInfoGroup, moduleType.Name, moduleType, dependsOn)); }
public void ShouldUseTypeNameIfNoNameSpecified() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(typeof(MockModule)); Assert.AreEqual<int>(1, groupInfo.Count); Assert.AreEqual<string>(typeof(MockModule).Name, groupInfo.ElementAt(0).ModuleName); }
public void NullTypeThrows() { var ex = Assert.Throws <ArgumentNullException>(() => { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("NullModule", null); }); }
public void ShouldSetModuleTypeCorrectly() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("MockModule", typeof(MockModule)); Assert.AreEqual<int>(1, groupInfo.Count); Assert.AreEqual<string>(typeof(MockModule).AssemblyQualifiedName, groupInfo.ElementAt(0).ModuleType); }
public void ShouldUseTypeNameIfNoNameSpecified() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(typeof(MockModule)); Assert.Single(groupInfo); Assert.Equal(typeof(MockModule).Name, groupInfo.ElementAt(0).ModuleName); }
public void ShouldAddModuleToModuleInfoGroup() { string moduleName = "MockModule"; ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(moduleName, typeof(MockModule)); Assert.AreEqual<int>(1, groupInfo.Count); Assert.AreEqual<string>(moduleName, groupInfo.ElementAt(0).ModuleName); }
public void ShouldSetModuleTypeCorrectly() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("MockModule", typeof(MockModule)); Assert.AreEqual <int>(1, groupInfo.Count); Assert.AreEqual <string>(typeof(MockModule).AssemblyQualifiedName, groupInfo.ElementAt(0).ModuleType); }
public void ShouldUseTypeNameIfNoNameSpecified() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(typeof(MockModule)); Assert.AreEqual <int>(1, groupInfo.Count); Assert.AreEqual <string>(typeof(MockModule).Name, groupInfo.ElementAt(0).ModuleName); }
public void ShouldSetModuleTypeCorrectly() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("MockModule", typeof(MockModule)); Assert.Single(groupInfo); Assert.Equal(typeof(MockModule).AssemblyQualifiedName, groupInfo.ElementAt(0).ModuleType); }
public void ShouldAddModuleToModuleInfoGroup() { string moduleName = "MockModule"; ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(moduleName, typeof(MockModule)); Assert.Single(groupInfo); Assert.Equal(moduleName, groupInfo.ElementAt(0).ModuleName); }
public void ShouldAddModuleToModuleInfoGroup() { string moduleName = "MockModule"; ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule(moduleName, typeof(MockModule)); Assert.AreEqual <int>(1, groupInfo.Count); Assert.AreEqual <string>(moduleName, groupInfo.ElementAt(0).ModuleName); }
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 ShouldSetDependencies() { string dependency1 = "ModuleA"; string dependency2 = "ModuleB"; ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("MockModule", typeof(MockModule), dependency1, dependency2); Assert.IsNotNull(groupInfo.ElementAt(0).DependsOn); Assert.AreEqual(2, groupInfo.ElementAt(0).DependsOn.Count); Assert.IsTrue(groupInfo.ElementAt(0).DependsOn.Contains(dependency1)); Assert.IsTrue(groupInfo.ElementAt(0).DependsOn.Contains(dependency2)); }
public void CanAddGroups() { var catalog = new ModuleCatalog(); ModuleInfo moduleInfo = new ModuleInfo(); ModuleInfoGroup group = new ModuleInfoGroup { moduleInfo }; catalog.Items.Add(group); Assert.Single(catalog.Modules); Assert.Same(moduleInfo, catalog.Modules.ElementAt(0)); }
public void CanAddGroups() { var catalog = new ModuleCatalog(); ModuleInfo moduleInfo = new ModuleInfo(); ModuleInfoGroup group = new ModuleInfoGroup { moduleInfo }; catalog.Items.Add(group); Assert.AreEqual(1, catalog.Modules.Count()); Assert.AreSame(moduleInfo, catalog.Modules.ElementAt(0)); }
/// <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); }
private void BuildByGroup(ModuleInfoGroup group) { //IEnumerable<ModuleInfoGroup> groups = this.moduleCatalog.Groups; sb.AppendLine(SPACE_STRING_4 + "<Modularity:ModuleInfoGroup "); if (!string.IsNullOrEmpty(group.Ref)) { sb.Append(" Ref=\"" + group.Ref + "\""); } sb.Append(" InitializationMode=\"" + group.InitializationMode.ToString() + "\">"); IEnumerator <ModuleInfo> moduleInfos = group.GetEnumerator(); while (moduleInfos.MoveNext()) { BuildModule(moduleInfos.Current, SPACE_STRING_8); } }
private void BuildByGroup(ModuleInfoGroup group) { //IEnumerable<ModuleInfoGroup> groups = this.moduleCatalog.Groups; sb.AppendLine(SPACE_STRING_4 + "<Modularity:ModuleInfoGroup "); if (!string.IsNullOrEmpty(group.Ref)) { sb.Append(" Ref=\"" + group.Ref + "\""); } sb.Append(" InitializationMode=\"" + group.InitializationMode.ToString() +"\">"); IEnumerator<ModuleInfo> moduleInfos = group.GetEnumerator(); while(moduleInfos.MoveNext()) { BuildModule(moduleInfos.Current,SPACE_STRING_8); } }
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); }
public void NullTypeThrows() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); groupInfo.AddModule("NullModule", null); }
public void NullTypeThrows() { ModuleInfoGroup groupInfo = new ModuleInfoGroup(); Assert.ThrowsException<ArgumentNullException>(() => groupInfo.AddModule("NullModule", null)); }
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); } }