1
1
# 组件开发指南
2
2
3
+ 这个是C#组件开发指南,[ 前往浏览器组件] ( ./web.md )
4
+
3
5
在开发组件之前,你需要有以下知识
4
6
- [ C# 12] ( https://learn.microsoft.com/zh-cn/dotnet/csharp/ )
5
7
- [ axaml] ( https://docs.avaloniaui.net/docs/basics/user-interface/introduction-to-xaml )
@@ -24,6 +26,37 @@ dotnet build
24
26
25
27
此时,会构建到` ./src/build_out/Debug/net8.0 ` ,你可以在这里面找到` ColorDesktop.Launcher.exe `
26
28
29
+ 然后是组件引用` ColorDesktop.Api ` ,有两种方式实现
30
+
31
+ - 使用源码的方式引用API
32
+ 1 . 打开` ColorDesktop.sln ` ,在里面新建你的组件项目
33
+ 2 . 修改` ColorDesktop.Debug ` ,并引用你的组件项目,
34
+ 3 . 修改` ColorDesktop.Debug ` 的` Program ` 函数` BuildAvaloniaApp ` ,在里面添加你的组件
35
+ ``` c#
36
+ new AnalogClockPlugin .AnalogClockPlugin ().LoadLang (LanguageType .zh_cn );
37
+ ```
38
+ 你的组件类可能,没有,你可以后面再回来加,如果不加上会导致语言加载错误
39
+
40
+ - 使用Nuget包方式引用API
41
+ 1 . 创建一个C# 类库工程
42
+ 2 . 安装[ nuget包` ColorDesktop.Api ` ] ( https://www.nuget.org/packages/ColorDesktop.Api )
43
+ 3 . 创建一个Avalonia项目,同时引用你的类库工程
44
+ 4 . 删除里面的所有` PackageReference ` 引用` Avalonia ` 项,例如
45
+ ``` xml
46
+ <!-- 这些全部删掉 -->
47
+ <PackageReference Include =" Avalonia" Version =" $(AvaloniaVersion)" />
48
+ <PackageReference Include =" Avalonia.Themes.Fluent" Version =" $(AvaloniaVersion)" />
49
+ <!-- 等... -->
50
+ ```
51
+ 5 . 修改控制台应用的` Program ` 函数` BuildAvaloniaApp ` ,在里面添加你的组件
52
+ ``` c#
53
+ new AnalogClockPlugin .AnalogClockPlugin ().LoadLang (LanguageType .zh_cn );
54
+ ```
55
+ 你的组件类可能,没有,你可以后面再回来加,如果不加上会导致语言加载错误
56
+
57
+ 完成以上操作后,就可以开始开发组件了,同时若VS装上了` Avalonia预览插件 ` ,也可以预览你的UI了
58
+ ** 注意,如果使用nuget方式,则在预览中不会使用ColorDesktop的样式,但是组件加载后会使用**
59
+
27
60
## 组件与显示实例概念
28
61
29
62
` 组件 ` 是软件的附属,组件里面有用于操作与显示的内容
@@ -82,6 +115,7 @@ dotnet build
82
115
//组件作者
83
116
"Auther" : " Coloryr" ,
84
117
//组件程序集,就是dll的名字,在这里可以添加你的依赖库等
118
+ //这个列表里面是最先加载的,若你的运行库很多,可以不写,会后面自动加载
85
119
"Dlls" : [
86
120
" ColorDesktop.AnalogClockPlugin"
87
121
],
@@ -113,7 +147,7 @@ dotnet build
113
147
"ApiVersion" : " 4"
114
148
}
115
149
```
116
- 然后设置编译后复制
150
+ 然后设置编译后设置 ` 编译后复制 ` ,或者在工程内加入这段
117
151
``` xml
118
152
<ItemGroup >
119
153
<None Update =" plugin.json" >
@@ -122,19 +156,18 @@ dotnet build
122
156
</ItemGroup >
123
157
```
124
158
125
- 编写组件主入口类,需要实现接口[ ColorDesktop.Api.IPlugin] ( ./src/ColorDesktop.Api/IPlugin.cs )
159
+ 然后编写组件主入口类,需要实现接口[ ColorDesktop.Api.IPlugin] ( ./src/ColorDesktop.Api/IPlugin.cs )
160
+ 然后编写显示实例,需要实现接口[ ColorDesktop.Api.IInstance] ( ./src/ColorDesktop.Api/IInstance.cs )
126
161
127
- 编写显示实例,需要实现接口[ ColorDesktop.Api.IInstance] ( ./src/ColorDesktop.Api/IInstance.cs )
128
-
129
- 组件生命周期
162
+ ## 组件生命周期
130
163
![ ] ( ./pic/pic8.png )
131
164
组件相关的生命周期有四个函数
132
165
- Init 只在组件初始化时调用,整个生命周期只会调用一次
133
166
- Enable 组件启用时调用,会多次调用,在[ 组件管理] ( ./README.md#组件管理 ) 界面下的` 启用组件 ` 就会调用这个
134
167
- Disable 组件卸载时调用,会多次调用,在[ 组件管理] ( ./README.md#组件管理 ) 界面下的` 禁用组件 ` 就会调用这个
135
168
- Stop 组件关闭时调用,整个生命周期只会调用一次,调用后组件会被卸载
136
169
137
- 显示实例生命周期
170
+ ## 显示实例生命周期
138
171
![ ] ( ./pic/pic9.png )
139
172
显示实例相关的生命周期有五个函数
140
173
- CreateView 只会调用一次,需要返回一个Avalonia的Control,及显示内容
@@ -161,11 +194,6 @@ return new InstanceDataObj()
161
194
162
195
更多具体内容可以参考[ 示例插件] ( ./src/Plugins/ColorDesktop.ClockPlugin/ClockPlugin.cs ) 和[ 示例显示实例] ( ./src/Plugins/ColorDesktop.ClockPlugin/ClockControl.axaml.cs )
163
196
164
- ## 预览
165
-
166
- 如果你使用了VS2022,并安装了Avalonia插件,但是无法预览页面
167
- 此时你需要将[ ColorDesktop.Debug] ( ./src/ColorDesktop.Debug/ColorDesktop.Debug.csproj ) 引入到你的解决方案中,添加你的组件为依赖项目,然后编译,选择启动项为` ColorDesktop.Debug ` 即可
168
-
169
197
## 组件公共API
170
198
171
199
在类` ColorDesktop.Api.LauncherApi ` 里面可以获取一些用于操作的API
@@ -209,7 +237,8 @@ public static void CallEvent(BaseEvent pluginEvent);
209
237
210
238
## CoreLib
211
239
这个是` ColorDesktop.CoreLib ` 组件
212
- 主要是用于将重复代码抽出来弄成一个组件方便其他组件调用
240
+ 主要是用于将重复代码抽出来弄成一个组件方便其他组件调用
241
+ ~~ 这里是Coloryr组件用的CoreLib,你可以自己去写一个~~
213
242
214
243
使用前需要将其以共享的方式作为依赖
215
244
``` json
0 commit comments