diff --git a/XCode.PostgreSQL/XCode.PostgreSQL.csproj b/XCode.PostgreSQL/XCode.PostgreSQL.csproj
index df8c222e5..21705da41 100644
--- a/XCode.PostgreSQL/XCode.PostgreSQL.csproj
+++ b/XCode.PostgreSQL/XCode.PostgreSQL.csproj
@@ -36,7 +36,7 @@
-
+
diff --git a/XCode/Code/ICodePlugin.cs b/XCode/Code/ICodePlugin.cs
new file mode 100644
index 000000000..d0c2cccce
--- /dev/null
+++ b/XCode/Code/ICodePlugin.cs
@@ -0,0 +1,39 @@
+using NewLife;
+using NewLife.Model;
+using XCode.DataAccessLayer;
+
+namespace XCode.Code;
+
+/// 代码生成插件
+public interface ICodePlugin : IPlugin
+{
+ /// 修正数据表
+ ///
+ void FixTables(IList tables);
+}
+
+/// 代码生成插件基类
+[Plugin("CodeBuild")]
+public abstract class CodePlugin : DisposeBase, ICodePlugin
+{
+ /// 服务提供者
+ public IServiceProvider? Provider { get; set; }
+
+ /// 初始化插件
+ ///
+ ///
+ ///
+ ///
+ public virtual Boolean Init(String? identity, IServiceProvider provider)
+ {
+ if (identity != "CodeBuild") return false;
+
+ Provider = provider;
+
+ return true;
+ }
+
+ /// 修正数据表
+ ///
+ public virtual void FixTables(IList tables) { }
+}
\ No newline at end of file
diff --git a/XCode/XCode.csproj b/XCode/XCode.csproj
index 8a96718fe..e10f9c661 100644
--- a/XCode/XCode.csproj
+++ b/XCode/XCode.csproj
@@ -44,7 +44,7 @@
-
+
diff --git a/XCodeTool/Program.cs b/XCodeTool/Program.cs
index 344d1791c..e1edf9e44 100644
--- a/XCodeTool/Program.cs
+++ b/XCodeTool/Program.cs
@@ -8,6 +8,7 @@
using System.Threading.Tasks;
using NewLife;
using NewLife.Log;
+using NewLife.Model;
using XCode;
using XCode.Code;
@@ -41,6 +42,15 @@ static void Main(string[] args)
// 检查工具
var task = Task.Run(CheckTool);
+ // 加载插件
+ var manager = new PluginManager
+ {
+ Identity = "CodeBuild",
+ Log = XTrace.Log,
+ };
+ manager.Load();
+ manager.Init();
+
// 在当前目录查找模型文件
var file = "";
if (args.Length > 0) file = args.LastOrDefault();
@@ -57,7 +67,7 @@ static void Main(string[] args)
return;
}
- Build(file, log);
+ Build(file, log, manager);
}
else
{
@@ -77,7 +87,7 @@ static void Main(string[] args)
// 循环处理
foreach (var item in files)
{
- Build(item, log);
+ Build(item, log, manager);
}
}
else
@@ -96,7 +106,7 @@ static void Main(string[] args)
/// 生成实体类。用户可以调整该方法可以改变生成实体类代码的逻辑,从而得到自己的代码生成器
///
- static void Build(String modelFile, ILog log)
+ static void Build(String modelFile, ILog log, PluginManager manager)
{
XTrace.WriteLine("正在处理:{0}", modelFile);
@@ -115,6 +125,21 @@ static void Build(String modelFile, ILog log)
try
{
XTrace.WriteLine("修正模型:{0}", modelFile);
+ foreach (var item in manager.Plugins)
+ {
+ if (item is ICodePlugin plugin)
+ {
+ try
+ {
+ plugin.FixTables(tables);
+ }
+ catch (Exception ex)
+ {
+ XTrace.WriteException(ex);
+ }
+ }
+ }
+
EntityBuilder.FixModelFile(modelFile, option, atts, tables, log);
}
catch (Exception ex)
diff --git a/XUnitTest.XCode/XUnitTest.XCode.csproj b/XUnitTest.XCode/XUnitTest.XCode.csproj
index 23601067e..48445eebf 100644
--- a/XUnitTest.XCode/XUnitTest.XCode.csproj
+++ b/XUnitTest.XCode/XUnitTest.XCode.csproj
@@ -80,8 +80,8 @@
-
-
+
+