import{_ as r,c as g,e as k,d as l,a as s,w as n,b as a,r as p,o as A}from"./app-DlzW8FTI.js";const B={},c={class:"hint-container note"};function o(y,i){const d=p("Tabs"),e=p("RouteLink");return A(),g("div",null,[i[18]||(i[18]=k(`
ClassIsland 的插件需要定义一个插件入口类,插件入口类需要继承PluginBase抽象类,并添加PluginEntrance属性。如果您通过模板创建了 ClassIsland 插件,模板已经给您预先定义好了插件入口点。下面是一个插件入口的示例:
using ClassIsland.Core.Abstractions;
using ClassIsland.Core.Attributes;
using ClassIsland.Core.Controls.CommonDialog;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace HelloWorldPlugin;
[PluginEntrance]
public class Plugin : PluginBase
{
public override void Initialize(HostBuilderContext context, IServiceCollection services)
{
}
}在上面的代码中,我们定义了一个名为Plugin的类,并继承了 PluginBase抽象类。同时为Plugin类添加了PluginEntrance属性,以声明这个类是插件入口类。
这个插件入口类也会在初始化时添加到 IoC 主机上,您可以在插件注册的服务中通过依赖注入获取插件入口类实例,例如:
`,5)),l(d,{data:[{id:"服务定位器法"},{id:"构造函数注入法"}]},{title0:n(({value:t,isActive:h})=>i[0]||(i[0]=[a("服务定位器法")])),title1:n(({value:t,isActive:h})=>i[1]||(i[1]=[a("构造函数注入法")])),tab0:n(({value:t,isActive:h})=>i[2]||(i[2]=[s("div",{class:"language-csharp line-numbers-mode","data-highlighter":"shiki","data-ext":"csharp",style:{"--shiki-light":"#383A42","--shiki-dark":"#abb2bf","--shiki-light-bg":"#FAFAFA","--shiki-dark-bg":"#282c34"}},[s("pre",{class:"shiki shiki-themes one-light one-dark-pro vp-code"},[s("code",{class:"language-csharp"},[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"var"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E06C75"}}," plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#56B6C2"}}," ="),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}}," IAppHost"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"."),s("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}},"GetService"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"<"),s("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"Plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},">(); "),s("span",{style:{"--shiki-light":"#A0A1A7","--shiki-light-font-style":"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"}},"// 这里的 Plugin 是您的入口点的实际类名")])])]),s("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[s("div",{class:"line-number"})])],-1)])),tab1:n(({value:t,isActive:h})=>i[3]||(i[3]=[s("div",{class:"language-csharp line-numbers-mode","data-highlighter":"shiki","data-ext":"csharp",style:{"--shiki-light":"#383A42","--shiki-dark":"#abb2bf","--shiki-light-bg":"#FAFAFA","--shiki-dark-bg":"#282c34"}},[s("pre",{class:"shiki shiki-themes one-light one-dark-pro vp-code"},[s("code",{class:"language-csharp"},[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A0A1A7","--shiki-light-font-style":"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"}},"// 这里的 Plugin 是您的入口点的实际类名")]),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"public"),s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," class"),s("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}}," Demiurge"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"("),s("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"Plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}}," plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},") {")]),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," private"),s("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}}," Plugin"),s("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#ABB2BF"}}," Plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}}," { "),s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"get"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"; } "),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#56B6C2"}},"="),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E06C75"}}," plugin"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},";")]),a(` `),s("span",{class:"line"}),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," private"),s("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," void"),s("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}}," DoSomething"),s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"() {")]),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#A0A1A7","--shiki-light-font-style":"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"}}," // 此时我们可以通过 Plugin 属性访问到当前插件入口点实例了")]),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}}," }")]),a(` `),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"}")])])]),s("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1)])),_:1}),i[19]||(i[19]=k(`其中的Initialize初始化方法会在插件加载后马上执行。您可以在这个方法中完成插件初始化操作。下面的代码会在初始化时显示一个“Hello world!”弹窗。
// ...
namespace HelloWorldPlugin;
[PluginEntrance]
public class Plugin : PluginBase
{
public override void Initialize(HostBuilderContext context, IServiceCollection services)
{
CommonDialog.ShowInfo("Hello world!");
}
// ...
}// ...
namespace PluginWithSettingsPage;
[PluginEntrance]
public class Plugin : PluginBase
{
public Settings Settings { get; set; } = new();
public override void Initialize(HostBuilderContext context, IServiceCollection services)
{
services.AddSettingsPage<ExampleSettingsPage>();
services.AddComponent<ExampleComponent>();
}
}