using System; using System.IO; namespace IPA.Loader.Features { internal class ConfigProviderFeature : Feature { public override bool Initialize(PluginLoader.PluginMetadata meta, string[] parameters) {// parameters should be (fully qualified name of provider type) if (parameters.Length != 1) { InvalidMessage = "Incorrect number of parameters"; return false; } RequireLoaded(meta); Type getType; try { getType = meta.Assembly.GetType(parameters[0]); } catch (ArgumentException) { InvalidMessage = $"Invalid type name {parameters[0]}"; return false; } catch (Exception e) when (e is FileNotFoundException || e is FileLoadException || e is BadImageFormatException) { string filename; switch (e) { case FileNotFoundException fn: filename = fn.FileName; goto hasFilename; case FileLoadException fl: filename = fl.FileName; goto hasFilename; case BadImageFormatException bi: filename = bi.FileName; hasFilename: InvalidMessage = $"Could not find {filename} while loading type"; break; default: InvalidMessage = $"Error while loading type: {e}"; break; } return false; } try { Config.Config.Register(getType); return true; } catch (Exception e) { InvalidMessage = $"Error generated while creating delegate: {e}"; return false; } } } }