Ejemplo n.º 1
0
        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();
            //}
        }
Ejemplo n.º 2
0
        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);
        }