@elf-express/admin-net-mcp 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/index.js +83 -88
  2. package/knowledge/Furion_Teaching_Manual/04-1-/351/205/215/347/275/256.md +442 -0
  3. package/knowledge/Furion_Teaching_Manual/04-2-/351/201/270/351/240/205.md +363 -0
  4. package/knowledge/Furion_Teaching_Manual/05-1-/345/213/225/346/205/213WebAPI.md +825 -0
  5. package/knowledge/Furion_Teaching_Manual/05-2-HttpContext.md +217 -0
  6. package/knowledge/Furion_Teaching_Manual/05-3-/347/257/251/351/201/270/345/231/250/346/224/224/346/210/252/345/231/250AOP.md +581 -0
  7. package/knowledge/Furion_Teaching_Manual/05-4-/350/253/213/346/261/202/347/250/275/346/240/270/346/227/245/350/252/214.md +129 -0
  8. package/knowledge/Furion_Teaching_Manual/05-5-/344/270/255/344/273/213/350/273/237/351/253/224Middleware.md +328 -0
  9. package/knowledge/Furion_Teaching_Manual/05-6-Vue-React-Angular/344/273/213/351/235/242/344/273/243/347/220/206.md +317 -0
  10. package/knowledge/Furion_Teaching_Manual/06-1/350/246/217/347/257/204/345/214/226/346/216/245/345/217/243.md +1458 -0
  11. package/knowledge/Furion_Teaching_Manual/06-2/347/254/254/344/270/211/346/226/271API_Scalar.md +91 -0
  12. package/knowledge/Furion_Teaching_Manual/07-/345/217/213/345/245/275/344/276/213/345/244/226/350/231/225/347/220/206.md +511 -0
  13. package/knowledge/Furion_Teaching_Manual/08-1-/350/263/207/346/226/231/351/251/227/350/255/211/345/237/272/347/244/216/344/275/277/347/224/250.md +587 -0
  14. package/knowledge/Furion_Teaching_Manual/10-1-SqlSugar/346/225/264/345/220/210.md +336 -0
  15. package/knowledge/Furion_Teaching_Manual/11-SaaS /345/244/232/347/247/237/346/210/266/347/255/206/350/250/230.md" +271 -0
  16. package/knowledge/Furion_Teaching_Manual/12-furion-dependency-injection.md +408 -0
  17. package/knowledge/Furion_Teaching_Manual/13-/347/211/251/344/273/266/350/263/207/346/226/231/346/230/240/345/260/204/357/274/210Mapster/357/274/211.md +162 -0
  18. package/knowledge/Furion_Teaching_Manual/14-/345/210/206/345/270/203/345/274/217/347/274/223/345/255/230.md +311 -0
  19. package/knowledge/Furion_Teaching_Manual/15-/345/256/211/345/205/250/351/211/264/346/235/203.md +832 -0
  20. package/knowledge/Furion_Teaching_Manual/17-/346/252/242/350/246/226/347/257/204/346/234/254/345/274/225/346/223/216.md +327 -0
  21. package/knowledge/Furion_Teaching_Manual/18-/346/227/245/350/252/214/350/250/230/351/214/204.md +639 -0
  22. package/knowledge/Furion_Teaching_Manual/19-1-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/345/237/272/347/244/216/344/275/277/347/224/250.md +621 -0
  23. package/knowledge/Furion_Teaching_Manual/19-2-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/351/200/262/351/232/216/346/214/207/345/215/227.md +928 -0
  24. package/knowledge/Furion_Teaching_Manual/19-3-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/345/270/270/350/246/213/345/225/217/351/241/214.md +362 -0
  25. package/knowledge/Furion_Teaching_Manual/20-/350/263/207/346/226/231/345/212/240/350/247/243/345/257/206.md +286 -0
  26. package/knowledge/Furion_Teaching_Manual/20-/351/231/204/351/214/204-KSort/350/263/207/346/226/231/347/260/275/345/220/215/345/256/214/346/225/264/345/216/237/345/247/213/347/242/274.md +305 -0
  27. package/knowledge/Furion_Teaching_Manual/21-/345/205/250/347/220/203/345/214/226/345/222/214/346/234/254/345/234/260/345/214/226.md +342 -0
  28. package/knowledge/Furion_Teaching_Manual/22-/344/272/213/344/273/266/345/214/257/346/265/201/346/216/222EventBus.md +448 -0
  29. package/knowledge/Furion_Teaching_Manual/23-JSON/345/272/217/345/210/227/345/214/226.md +340 -0
  30. package/knowledge/Furion_Teaching_Manual/24-/345/215/263/346/231/202/351/200/232/350/250/212SignalR.md +247 -0
  31. package/knowledge/Furion_Teaching_Manual/25-/350/274/224/345/212/251/350/247/222/350/211/262/346/234/215/345/213/231WorkerService.md +295 -0
  32. package/knowledge/Furion_Teaching_Manual/26-1-/346/216/222/347/250/213/344/275/234/346/245/255/345/256/232/346/231/202/344/273/273/345/213/231.md +631 -0
  33. package/knowledge/Furion_Teaching_Manual/26-2-Cron/350/241/250/351/201/224/345/274/217.md +203 -0
  34. package/knowledge/Furion_Teaching_Manual/26-3-/344/273/273/345/213/231/344/275/207/345/210/227TaskQueue.md +215 -0
  35. package/knowledge/Furion_Teaching_Manual/27-/345/210/206/346/225/243/345/274/217ID/347/224/237/346/210/220.md +86 -0
  36. package/knowledge/Furion_Teaching_Manual/28-/346/250/241/347/265/204/345/214/226/351/226/213/347/231/274.md +68 -0
  37. package/knowledge/Furion_Teaching_Manual/29-/346/265/201/350/256/212/347/211/251/344/273/266Clay.md +313 -0
  38. package/knowledge/Furion_Teaching_Manual/30-/350/204/253/346/225/217/350/231/225/347/220/206/357/274/210Sensitive Detection).md" +168 -0
  39. package/knowledge/Furion_Teaching_Manual/32-/346/234/203/350/251/261/345/222/214/347/213/200/346/205/213/347/256/241/347/220/206.md +147 -0
  40. package/knowledge/Furion_Teaching_Manual/33-IPC/347/250/213/345/272/217/351/200/232/350/250/212.md +98 -0
  41. package/knowledge/Furion_Teaching_Manual/34-2-Docker/351/203/250/347/275/262.md +313 -0
  42. package/knowledge/Furion_Teaching_Manual/34-3-Nginx/351/203/250/347/275/262.md +157 -0
  43. package/knowledge/Furion_Teaching_Manual/34-8-WindowsService/351/203/250/347/275/262.md +112 -0
  44. package/knowledge/Furion_Teaching_Manual/35-1-Docker/347/222/260/345/242/203/346/214/201/347/272/214/351/203/250/347/275/262Jenkins.md +169 -0
  45. package/knowledge/Furion_Teaching_Manual/36-1-/345/226/256/345/205/203/346/270/254/350/251/246/346/225/264/345/220/210/346/270/254/350/251/246.md +275 -0
  46. package/knowledge/Furion_Teaching_Manual/36-3-/345/237/272/346/272/226/346/270/254/350/251/246Benchmarking.md +80 -0
  47. package/knowledge/attributes.md +153 -0
  48. package/knowledge/config.md +147 -0
  49. package/knowledge/entity.md +115 -0
  50. package/knowledge/event.md +124 -0
  51. package/knowledge/plugin.md +136 -0
  52. package/knowledge/service.md +146 -0
  53. package/knowledge/sqlsugar.md +172 -0
  54. package/knowledge/vue-typescript.md +338 -0
  55. package/package.json +3 -2
@@ -0,0 +1,327 @@
1
+ # 17. 檢視/範本引擎
2
+
3
+ ## 17.1 關於檢視引擎
4
+
5
+ 檢視引擎負責根據檢視範本建立 HTML。檢視通常是 HTML 和程式語言的某種混合,支援變數定義、方法呼叫及邏輯編寫。
6
+
7
+ 在 Furion 框架中,底層整合了微軟提供的 Razor 檢視引擎元件並提供更加靈活方便的語法糖。
8
+
9
+ ---
10
+
11
+ ## 17.2 檢視引擎作用
12
+
13
+ - 支援 ASP.NET Core 完整的 Razor 語法
14
+ - 根據不同的資料編譯範本產生不同的輸出
15
+ - 實現強大的外掛化機制
16
+ - 實現全站頁面靜態化
17
+ - 可以用作郵件範本、簡訊範本、優惠券資訊範本等
18
+
19
+ ---
20
+
21
+ ## 17.3 基礎使用
22
+
23
+ ### 17.3.1 註冊服務
24
+
25
+ ```csharp
26
+ public void ConfigureServices(IServiceCollection services)
27
+ {
28
+ services.AddViewEngine();
29
+ }
30
+ ```
31
+
32
+ ### 17.3.2 使用方式
33
+
34
+ **建構函式注入 `IViewEngine`:**
35
+
36
+ ```csharp
37
+ using Furion.DynamicApiController;
38
+ using Furion.ViewEngine;
39
+
40
+ namespace Furion.Application
41
+ {
42
+ public class ViewEngineService : IDynamicApiController
43
+ {
44
+ private readonly IViewEngine _viewEngine;
45
+
46
+ public ViewEngineService(IViewEngine viewEngine)
47
+ {
48
+ _viewEngine = viewEngine;
49
+ var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ **字串方式:**
56
+
57
+ ```csharp
58
+ var result = "Hello @Model.Name".RunCompile(new { Name = "Furion" });
59
+ ```
60
+
61
+ ### 17.3.3 弱型別範本
62
+
63
+ ```csharp
64
+ var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });
65
+ // 結果:Hello Furion
66
+ ```
67
+
68
+ > 支援非同步 `RunCompileAsync`。
69
+
70
+ ### 17.3.4 強型別範本
71
+
72
+ ```csharp
73
+ namespace YourProject; // Furion 4.8.4.16+ 支援無命名空間寫法
74
+
75
+ public class TestModel
76
+ {
77
+ public string Name { get; set; }
78
+ public int[] Items { get; set; }
79
+ }
80
+ ```
81
+
82
+ ```csharp
83
+ var result = _viewEngine.RunCompile(@"
84
+ Hello @Model.Name
85
+ @foreach(var item in Model.Items)
86
+ {
87
+ <p>@item</p>
88
+ }
89
+ ", new TestModel // Furion 4.8.4.16+ 支援匿名型別
90
+ {
91
+ Name = "Furion",
92
+ Items = new[] { 3, 1, 2 }
93
+ });
94
+ // 結果:Hello Furion <p>3</p> <p>1</p> <p>2</p>
95
+ ```
96
+
97
+ > 支援非同步 `RunCompileAsync`。
98
+
99
+ ### 17.3.5 高效能範本快取 🥇
100
+
101
+ 由於範本編譯需要消耗大量的效能,建議使用帶 `FromCached` 結尾的 `RunCompileFromCached` 替代。呼叫該方法後會自動將範本編譯成 `.dll` 以便下次使用,減少第二次之後使用範本的效能損耗。
102
+
103
+ ```csharp
104
+ var result = _viewEngine.RunCompileFromCached(@"
105
+ Hello @Model.Name
106
+ @foreach(var item in Model.Items)
107
+ {
108
+ <p>@item</p>
109
+ }
110
+ ", new TestModel
111
+ {
112
+ Name = "Furion",
113
+ Items = new[] { 3, 1, 2 }
114
+ });
115
+ ```
116
+
117
+ 呼叫 `RunCompileFromCached` 方法之後將會使用 MD5 加密範本並產生 `.dll` 存放在網站根目錄下的 `templates` 目錄中。只要範本內容不變,資料發生改變也不會重新編譯範本,大幅提升首次之後的效能。
118
+
119
+ ---
120
+
121
+ ## 17.4 進階用法
122
+
123
+ 進階用法支援將特定程式集、特定命名空間、特定型別引入到範本中使用。
124
+
125
+ ### 17.4.1 新增程式集
126
+
127
+ ```csharp
128
+ var result = _viewEngine.RunCompileFromCached(
129
+ @"<div>@System.IO.Path.Combine(""Furion"", ""ViewEngine"")</div>",
130
+ builderAction: builder =>
131
+ {
132
+ builder.AddAssemblyReferenceByName("System.IO");
133
+ });
134
+ // 結果:<div>Furion\\ViewEngine</div>
135
+ ```
136
+
137
+ 多種方式載入程式集:
138
+
139
+ ```csharp
140
+ builder.AddAssemblyReferenceByName("System.Security"); // 透過名稱
141
+ builder.AddAssemblyReference(typeof(System.IO.File)); // 透過型別
142
+ builder.AddAssemblyReference(Assembly.Load("source")); // 透過中繼資料參考
143
+ ```
144
+
145
+ ### 17.4.2 新增命名空間
146
+
147
+ ```csharp
148
+ var result = _viewEngine.RunCompileFromCached(
149
+ @"<div>@Path.Combine(""Furion"", ""ViewEngine"")</div>",
150
+ builderAction: builder =>
151
+ {
152
+ builder.AddUsing("System.IO");
153
+ builder.AddAssemblyReferenceByName("System.IO");
154
+ });
155
+ ```
156
+
157
+ 也支援加入多個 `using`:
158
+
159
+ ```csharp
160
+ builder.AddUsing("System.IO");
161
+ builder.AddUsing("Furion");
162
+ ```
163
+
164
+ ### 17.4.3 定義範本方法
165
+
166
+ ```csharp
167
+ var result = _viewEngine.RunCompileFromCached(@"
168
+ <area>
169
+ @{ RecursionTest(3); }
170
+ </area>
171
+
172
+ @{
173
+ void RecursionTest(int level)
174
+ {
175
+ if (level <= 0) return;
176
+
177
+ <div>LEVEL: @level</div>
178
+ @{ RecursionTest(level - 1); }
179
+ }
180
+ }
181
+ ");
182
+ // 結果:
183
+ // <div>LEVEL: 3</div>
184
+ // <div>LEVEL: 2</div>
185
+ // <div>LEVEL: 1</div>
186
+ ```
187
+
188
+ ### 17.4.4 呼叫類別方法
189
+
190
+ 定義 `CustomModel` 類別並繼承 `ViewEngineModel` 基底類別:
191
+
192
+ ```csharp
193
+ public class CustomModel : ViewEngineModel
194
+ {
195
+ public int A { get; set; }
196
+ public string B { get; set; }
197
+
198
+ public string Decorator(object value)
199
+ {
200
+ return "-=" + value + "=-";
201
+ }
202
+ }
203
+ ```
204
+
205
+ 在範本中呼叫 `Decorator(value)` 方法:
206
+
207
+ ```csharp
208
+ var content = @"Hello @A, @B, @Decorator(123)";
209
+
210
+ var template = _viewEngine.Compile<CustomModel>(content);
211
+
212
+ var result = template.Run(instance =>
213
+ {
214
+ instance.A = 10;
215
+ instance.B = "Alex";
216
+ });
217
+ // 結果:Hello 10, Alex, -=123=-
218
+ ```
219
+
220
+ ---
221
+
222
+ ## 17.5 特殊字元處理
223
+
224
+ 如有特殊符號如 `<`、`<>`、`&` 等,可透過 `@("<")` 或 `@('<')` 進行原樣輸出:
225
+
226
+ ```csharp
227
+ var str = "bool value = 1 @('<') 2"; // 源字串為:bool value = 1 < 2;
228
+ ```
229
+
230
+ ---
231
+
232
+ ## 17.6 字串範本替換引擎
233
+
234
+ Furion 除了內建檢視引擎之外,還支援以下幾種範本替換:
235
+
236
+ ```csharp
237
+ // 提供資料範本方式
238
+ var str = "我叫{name}".Render(new Dictionary{ {"name", "Furion"} });
239
+ var str = "我叫{Name}".Render(new { Name = "Furion" });
240
+ var str = "我叫{Detail.Name}".Render(new { Detail = new { Name = "Furion" } });
241
+
242
+ // 從設定讀取方式
243
+ var str = "我叫#(Furion:Address)".Render();
244
+ ```
245
+
246
+ 對應設定檔:
247
+
248
+ ```json
249
+ {
250
+ "Furion": {
251
+ "Address": "https://furion.net"
252
+ }
253
+ }
254
+ ```
255
+
256
+ ---
257
+
258
+ ## 17.7 格式化規範範本
259
+
260
+ 在 Furion v3.5.3+ 新增了 `TP.Wrapper(...)` 規範範本:
261
+
262
+ ```csharp
263
+ var template = TP.Wrapper("Furion 框架", "讓 .NET 開發更簡單,更通用,更流行。",
264
+ "##作者## 百小僧",
265
+ "##當前版本## v3.5.3",
266
+ "##文件位址## https://furion.net",
267
+ "##Copyright## 百小僧及百簽科技(廣東)有限公司");
268
+
269
+ Console.WriteLine(template);
270
+ ```
271
+
272
+ 輸出:
273
+
274
+ ```
275
+ ┏━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━
276
+ ┣ 讓 .NET 開發更簡單,更通用,更流行。
277
+
278
+ ┣ 作者: 百小僧
279
+ ┣ 當前版本: v3.5.3
280
+ ┣ 文件位址: https://furion.net
281
+ ┣ Copyright: 百小僧及百簽科技(廣東)有限公司
282
+ ┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━
283
+ ```
284
+
285
+ > **關於屬性產生**:如果列表項以 `##屬性名##` 開頭,自動產生 `屬性名:` 作為行首且自動等寬對齊。Furion 3.9.1 之前版本使用 `[屬性名]` 開頭。
286
+
287
+ ---
288
+
289
+ ## 17.8 產生矩形日誌範本
290
+
291
+ > **版本說明**:僅限 Furion 4.8.8.25+ 版本使用。
292
+
293
+ ```csharp
294
+ var template = TP.WrapperRectangle(new[] {
295
+ "百小僧",
296
+ "讓 .NET 開發更簡單,更通用,更流行。",
297
+ "一個應用程式框架,您可以將它整合到任何 .NET/C# 應用程式中。"
298
+ });
299
+
300
+ Console.WriteLine(template);
301
+ ```
302
+
303
+ 輸出:
304
+
305
+ ```
306
+ +-----------------------------------------------------------------------------+
307
+ | 百小僧 |
308
+ | 讓 .NET 開發更簡單,更通用,更流行。 |
309
+ | 一個應用程式框架,您可以將它整合到任何 .NET/C# 應用程式中。 |
310
+ +-----------------------------------------------------------------------------+
311
+ ```
312
+
313
+ 還可以設定對齊方式:
314
+
315
+ ```csharp
316
+ // 左對齊
317
+ var template = TP.WrapperRectangle(texts, -1);
318
+
319
+ // 置中對齊(預設)
320
+ var template = TP.WrapperRectangle(texts, 0);
321
+
322
+ // 右對齊
323
+ var template = TP.WrapperRectangle(texts, 1);
324
+
325
+ // 設定最長字串的追加長度
326
+ var template = TP.WrapperRectangle(texts, 1, 20); // 最長字串長度 + 20
327
+ ```