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