public void EnableModule(string moduleName) { ServiceProvider provider = CoolCatStartup.Services.BuildServiceProvider(); var contextProvider = new CollectibleAssemblyLoadContextProvider(); using (IServiceScope scope = provider.CreateScope()) { var dataStore = scope.ServiceProvider.GetService <IDataStore>(); var documentation = scope.ServiceProvider.GetService <IQueryDocumentation>(); var context = contextProvider.Get(moduleName, _partManager, scope, dataStore, documentation); PluginsLoadContexts.Add(moduleName, context); context.Enable(); } ResetControllActions(); //if (!PluginsLoadContexts.Any(moduleName)) //{ // ServiceProvider provider = CoolCatStartup.Services.BuildServiceProvider(); // var contextProvider = new CollectibleAssemblyLoadContextProvider(); // using (IServiceScope scope = provider.CreateScope()) // { // var dataStore = scope.ServiceProvider.GetService<IDataStore>(); // var documentation = scope.ServiceProvider.GetService<IQueryDocumentation>(); // var context = contextProvider.Get(moduleName, _partManager, scope, dataStore, documentation); // PluginsLoadContexts.Add(moduleName, context); // } // ResetControllActions(); //} }
public static IApplicationBuilder MystiqueRoute(this IApplicationBuilder app, IHostApplicationLifetime lifetime) { lifetime.ApplicationStopping.Register(() => { var json = JsonConvert.SerializeObject(PluginsLoadContexts.GetPlugins(all: true).Select(o => { o.PluginContext = null; return(o); })); var pluginFolder = Path.Combine(Environment.CurrentDirectory, "host_plugins", "plugins_cache.json"); File.WriteAllText(pluginFolder, json, Encoding.UTF8); }); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(routes => { routes.MapControllerRoute( name: "Mystique", pattern: "{controller=Home}/{action=Index}/{id?}"); routes.MapControllerRoute( name: "Plugins", pattern: "{area}/{controller=Home}/{action=Index}/{id?}"); }); return(app); }