/// <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 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);
        }
示例#15
0
        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));
        }
示例#16
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));
        }
        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));
        }
        /// <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);
            }
        }
示例#21
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);
        }
示例#22
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));
        }
        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));
 }
示例#25
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);
            }
        }
 public void NullTypeThrows()
 {
     ModuleInfoGroup groupInfo = new ModuleInfoGroup();
     groupInfo.AddModule("NullModule", null);
 }