Skip to content

Commit 30a8942

Browse files
committed
[feat]新增代码生成插件ICodePlugin,各个团队可以根据自己需要编写插件,从而控制代码生成效果
1 parent 198ee23 commit 30a8942

File tree

5 files changed

+71
-7
lines changed

5 files changed

+71
-7
lines changed

XCode.PostgreSQL/XCode.PostgreSQL.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</None>
3737
</ItemGroup>
3838
<ItemGroup>
39-
<PackageReference Include="Npgsql" Version="8.0.5" />
39+
<PackageReference Include="Npgsql" Version="8.0.6" />
4040
</ItemGroup>
4141
<ItemGroup>
4242
<ProjectReference Include="..\XCode\XCode.csproj" />

XCode/Code/ICodePlugin.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using NewLife;
2+
using NewLife.Model;
3+
using XCode.DataAccessLayer;
4+
5+
namespace XCode.Code;
6+
7+
/// <summary>代码生成插件</summary>
8+
public interface ICodePlugin : IPlugin
9+
{
10+
/// <summary>修正数据表</summary>
11+
/// <param name="tables"></param>
12+
void FixTables(IList<IDataTable> tables);
13+
}
14+
15+
/// <summary>代码生成插件基类</summary>
16+
[Plugin("CodeBuild")]
17+
public abstract class CodePlugin : DisposeBase, ICodePlugin
18+
{
19+
/// <summary>服务提供者</summary>
20+
public IServiceProvider? Provider { get; set; }
21+
22+
/// <summary>初始化插件</summary>
23+
/// <param name="identity"></param>
24+
/// <param name="provider"></param>
25+
/// <returns></returns>
26+
/// <exception cref="NotImplementedException"></exception>
27+
public virtual Boolean Init(String? identity, IServiceProvider provider)
28+
{
29+
if (identity != "CodeBuild") return false;
30+
31+
Provider = provider;
32+
33+
return true;
34+
}
35+
36+
/// <summary>修正数据表</summary>
37+
/// <param name="tables"></param>
38+
public virtual void FixTables(IList<IDataTable> tables) { }
39+
}

XCode/XCode.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</PackageReference>
4545
</ItemGroup>
4646
<ItemGroup>
47-
<PackageReference Include="NewLife.Core" Version="11.0.2024.1115" />
47+
<PackageReference Include="NewLife.Core" Version="11.0.2024.1124-beta1518" />
4848
</ItemGroup>
4949
<ItemGroup>
5050
<Compile Remove="build\**" />

XCodeTool/Program.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading.Tasks;
99
using NewLife;
1010
using NewLife.Log;
11+
using NewLife.Model;
1112
using XCode;
1213
using XCode.Code;
1314

@@ -41,6 +42,15 @@ static void Main(string[] args)
4142
// 检查工具
4243
var task = Task.Run(CheckTool);
4344

45+
// 加载插件
46+
var manager = new PluginManager
47+
{
48+
Identity = "CodeBuild",
49+
Log = XTrace.Log,
50+
};
51+
manager.Load();
52+
manager.Init();
53+
4454
// 在当前目录查找模型文件
4555
var file = "";
4656
if (args.Length > 0) file = args.LastOrDefault();
@@ -57,7 +67,7 @@ static void Main(string[] args)
5767
return;
5868
}
5969

60-
Build(file, log);
70+
Build(file, log, manager);
6171
}
6272
else
6373
{
@@ -77,7 +87,7 @@ static void Main(string[] args)
7787
// 循环处理
7888
foreach (var item in files)
7989
{
80-
Build(item, log);
90+
Build(item, log, manager);
8191
}
8292
}
8393
else
@@ -96,7 +106,7 @@ static void Main(string[] args)
96106

97107
/// <summary>生成实体类。用户可以调整该方法可以改变生成实体类代码的逻辑,从而得到自己的代码生成器</summary>
98108
/// <param name="modelFile"></param>
99-
static void Build(String modelFile, ILog log)
109+
static void Build(String modelFile, ILog log, PluginManager manager)
100110
{
101111
XTrace.WriteLine("正在处理:{0}", modelFile);
102112

@@ -115,6 +125,21 @@ static void Build(String modelFile, ILog log)
115125
try
116126
{
117127
XTrace.WriteLine("修正模型:{0}", modelFile);
128+
foreach (var item in manager.Plugins)
129+
{
130+
if (item is ICodePlugin plugin)
131+
{
132+
try
133+
{
134+
plugin.FixTables(tables);
135+
}
136+
catch (Exception ex)
137+
{
138+
XTrace.WriteException(ex);
139+
}
140+
}
141+
}
142+
118143
EntityBuilder.FixModelFile(modelFile, option, atts, tables, log);
119144
}
120145
catch (Exception ex)

XUnitTest.XCode/XUnitTest.XCode.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@
8080
</None>
8181
</ItemGroup>
8282
<ItemGroup>
83-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
84-
<PackageReference Include="NewLife.Core" Version="11.0.2024.1115" />
83+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
84+
<PackageReference Include="NewLife.Core" Version="11.0.2024.1124-beta1518" />
8585
<PackageReference Include="NewLife.IP" Version="2.2.2024.1102" />
8686
<PackageReference Include="NewLife.UnitTest" Version="1.0.2024.1006" />
8787
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="9.0.0" />

0 commit comments

Comments
 (0)