Exemple #1
0
 /// <summary>
 /// Gets the <see cref="System.Configuration.Configuration"/> for the specified module name.
 /// </summary>
 /// <param name="moduleName">The name of the module to lookup the configuration for.</param>
 /// <returns>A <see cref="System.Configuration.Configuration"/> instance.</returns>
 public System.Configuration.Configuration FindModuleConfiguration(string moduleName)
 {
     foreach (IModuleInfo moduleInfo in ModuleEnumerator.EnumerateModules())
     {
         if (String.Equals(moduleInfo.Name, moduleName, StringComparison.CurrentCultureIgnoreCase))
         {
             if (!String.IsNullOrEmpty(moduleInfo.VirtualPath))
             {
                 return(WebConfigurationManager.OpenWebConfiguration(moduleInfo.VirtualPath));
             }
         }
     }
     return(null);
 }
        public void ModuleEnumerator_LoadModules()
        {
            var appDataDirectory = new DirectoryInfo(Path.GetTempPath())
                                   .CreateSubdirectory(Guid.NewGuid().ToString());
            var    moduleDirectory = appDataDirectory.CreateSubdirectory("modules").CreateSubdirectory("testModule");
            string testModule      = TestUtilities.GetStringResource("Loader.testModule.json");

            File.WriteAllText(Path.Combine(moduleDirectory.FullName, "module.json"), testModule, Encoding.UTF8);
            var moduleEnum = new ModuleEnumerator(appDataDirectory.FullName);

            Assert.Contains(moduleEnum.Modules, m => m.Entry == "testModule");
            Assert.Equal(moduleDirectory.FullName, moduleEnum.Modules.First().ModuleDirectory.FullName);
            Assert.Equal(moduleDirectory.CreateSubdirectory("contents").FullName,
                         moduleEnum.Modules.First().ContentsDirectory.FullName);
        }
        public override void OnViewReady()
        {
            base.OnViewReady();

            foreach (IModuleInfo info in ModuleEnumerator.EnumerateModules())
            {
                AssemblyName assemblyName = Assembly.ReflectionOnlyLoadFrom(info.AssemblyFile).GetName();
                View.AddModule(assemblyName.Name, assemblyName.Version.ToString());
            }

            View.Text = "关于 " + ConfigurationManager.AppSettings["ShellCaption"];
            Bitmap bitmap = ImageService.GetBitmap(ConfigurationManager.AppSettings["SplashTop"]);

            View.TopPanel.BackgroundImage = bitmap;
            bitmap = ImageService.GetBitmap(ConfigurationManager.AppSettings["ShellIcon"], new Size(32, 32));
            View.IconPanel.BackgroundImage = bitmap;
        }
Exemple #4
0
        internal static void SetupModules(SetupType setupType)
        {
            if (!Directory.Exists(BaseDirectory))
            {
                return;
            }

            ModuleEnumerator enumerator = new ModuleEnumerator();

            while (enumerator.MoveNext())
            {
                string ModulePath = Path.Combine(BaseDirectory, enumerator.Current.FileName);
                if (!File.Exists(ModulePath))
                {
                    continue;
                }

                try
                {
                    if (enumerator.Current.LoadSpecifier != null)
                    {
                        ModuleListing.LoadSpecifierArgs args = new ModuleListing.LoadSpecifierArgs();
                        args.SetupType = setupType;
                        enumerator.Current.LoadSpecifier(args);

                        if (!args.ShouldLoad)
                        {
                            continue;
                        }

                        if (args.ShouldDelete)
                        {
                            File.Delete(ModulePath);
                            continue;
                        }
                    }

                    Assembly assembly = Assembly.LoadFrom(ModulePath);
                    if (assembly == null)
                    {
                        continue;
                    }
                    Type[] ModuleTypes = assembly.GetValidTypes(x => x.IsSubclassOf(typeof(Module))).ToArray();
                    if ((ModuleTypes.Length <= 0) || (ModuleTypes[0] == null))
                    {
                        continue;
                    }

                    Module moduleInstance = Activator.CreateInstance(ModuleTypes[0], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, null, null) as Module;
                    if (moduleInstance == null)
                    {
                        continue;
                    }

                    moduleInstance.Setup();
                    enumerator.Current.Interface = moduleInstance;
                    MelonDebug.Msg($"Loaded Compatibility Layer: {enumerator.Current.FileName}");
                }
                catch (Exception ex) { MelonDebug.Error($"Compatibility Layer [{enumerator.Current.FileName}] threw an Exception: {ex}"); continue; }
            }
        }