static string MakeFullPluginAssemblyPath(string pluginName) { var plugins = InEngineSettings.Make().Plugins; var isCorePlugin = Assembly.GetCallingAssembly().GetName().Name == pluginName; if (!isCorePlugin && !plugins.ContainsKey(pluginName)) { throw new PluginNotRegisteredException(pluginName); } return(Path.Combine( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), isCorePlugin ? "" : plugins[pluginName], $"{pluginName}.dll" )); }
public static List <PluginAssembly> Load <T>(bool shouldLoadCorePlugin = true) where T : IPlugin { RegisterPluginAssemblyResolver(); var pluginList = new List <PluginAssembly>(); try { if (shouldLoadCorePlugin) { pluginList.Add(new PluginAssembly(Assembly.GetExecutingAssembly())); } } catch (Exception exception) { LogManager.GetLogger <PluginAssembly>().Error(exception); throw new PluginNotFoundException("Could not load InEngine.Core plugin.", exception); } var assemblies = InEngineSettings .Make() .Plugins .Select(x => Assembly.LoadFrom(Path.Combine(x.Value, $"{x.Key}.dll"))); foreach (var assembly in assemblies) { try { if (assembly.GetTypes().Any(x => x.IsClass && typeof(T).IsAssignableFrom(x) && !x.IsAbstract)) { pluginList.Add(new PluginAssembly(assembly)); } } catch (Exception exception) { throw new PluginNotFoundException($"Could not load {assembly.GetName().Name} plugin.", exception); } } if (!pluginList.Any()) { throw new PluginNotFoundException("There are no plugins available."); } return(pluginList.OrderBy(x => x.Name).ToList()); }
public static InEngineSettings Make() { var inEngineSettings = new InEngineSettings(); try { new ConfigurationBuilder() .SetBasePath(BasePath) .AddJsonFile(ConfigurationFile) .Build() .GetSection("InEngine") .Bind(inEngineSettings); } catch (FileNotFoundException exception) { new Write().Error(exception.Message);; Environment.Exit(ExitCodes.fail); } catch (Exception exception) { new Write().Error(exception.Message); Environment.Exit(ExitCodes.fail); } return(inEngineSettings); }