插件管理 - kuiyu/RsCode GitHub Wiki

支持“热插拔”

要求.net core sdk3.1以上 ,安装RsCode.AspNetCore 1.3.0以上版本

通过插件管理,可以方便的安装与卸载插件程序,分四个步骤完成:

第一步 创建插件项目

1.1 实现IPluginModule接口

public class PluginSetup : IPluginModule
    {
        public string Title
        {
            get { return "插件标题"; }
        }

        public string Name
        {
            get { return Assembly.GetAssembly(GetType()).GetName().Name; }
        }

        public Version Version
        {
            get { return new Version(1, 0, 0, 0); }
        }

        public string EntryControllerName
        {
            get { return "rswl"; }
        }

        public string Description => "rscode插件描述";

        public string Author => "rswl";

        public string UpdateDate => "2020-1-1 20:22:00";
    }

EntryControllerName是插件的主控制器。这是插件的入口点。 创建这个控制器之后,您可以定义任何您想要的东西。它将像从主项目内部运行一样。

1.2将项目输出类型 改成 类库

1.3将项目的输出路径,指定到 主项目Plugins\插件xxxx目录
生成 输出路径 生成项目

第二步 创建主项目, 添加以下代码到主项目

[assembly: HostingStartup(typeof(PluginManagerHostingStartup))]
namespace MyWeb
{
   public class Startup
   {
      ....
   }
}

更换Program.cs

public class Program
    {
        public static async Task Main(string[] args)
        {
            await ApplicationManager.RunAsync(CreateHostBuilder, args);
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }); 
    }

在每个插件添加或删除后,应用程序应该重新启动

第三步 在页面中使用插件

@{
    var testPluginModule = PluginManager.GetModule("Plugins.TestPlugin"); // Your plugin assembly name without extension.
}

@if (testPluginModule != null)
{
    @Html.ActionLink(testPluginModule.Title, "Index", testPluginModule.EntryControllerName)
}

第四步 添加或删除插件 添加或删除Plugins文件夹下的dll,即可完成插件安装与删除

⚠️ **GitHub.com Fallback** ⚠️