From e57938fbda9bff702004038f76d009422968bff5 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 06 十一月 2026 18:05:07 +0800
Subject: [PATCH] 提交代码

---
 DeviceService/DriverManager/DriverInstance.cs |   74 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/DeviceService/DriverManager/DriverInstance.cs b/DeviceService/DriverManager/DriverInstance.cs
new file mode 100644
index 0000000..de337a8
--- /dev/null
+++ b/DeviceService/DriverManager/DriverInstance.cs
@@ -0,0 +1,74 @@
+namespace DeviceService.Driver
+{
+    /// <summary>
+    /// 鐢� DriverManager 鍒涘缓骞剁粺涓�绠$悊鐨勯┍鍔ㄥ疄渚嬩唬鐞嗐��
+    ///
+    /// 椹卞姩瀵硅薄鏈韩娲诲湪椹卞姩鍖呯殑 AppDomain 涓紙WPF/鏅�氱被鍧囦笉鍙法鍩熷皝閫侊級锛�
+    /// 鍥犳瀹夸富鎷垮埌鐨勬槸鏈被鐨勯�忔槑浠g悊锛氬涓昏皟鐢� <see cref="Invoke"/>銆�
+    /// <see cref="GetMethods"/>銆�<see cref="Release"/> 鏃讹紝瀹為檯鎵ц閮藉彂鐢熷湪椹卞姩鑷繁鐨勫煙鍐呫��
+    /// </summary>
+    public sealed class DriverInstance : MarshalByRefObject
+    {
+        private readonly DriverLoader _owner;
+
+        /// <summary>瀹炰緥鍙ユ焺锛堝涓讳笌鍔犺浇鍣ㄤ箣闂村畾浣嶅疄渚嬬殑鍞竴鏍囪瘑锛�</summary>
+        public string Handle { get; }
+
+        /// <summary>椹卞姩绫诲瀷鐨� CLR 鍏ㄥ悕</summary>
+        public string TypeFullName { get; }
+
+        /// <summary>娉ㄨВ涓殑"绫诲瀷"锛堝 CAN锛�</summary>
+        public string DriverType { get; }
+
+        /// <summary>娉ㄨВ涓殑"鍝佺墝"锛堝 BA锛�</summary>
+        public string Brand { get; }
+
+        /// <summary>鎵�灞為┍鍔ㄥ寘鍚嶏紙鐢� DriverManager 鍥炲~锛屼粎鐢ㄤ簬灞曠ず锛�</summary>
+        public string PackageFolder { get; set; }
+
+        // 瀹炰緥鐢� DriverManager 闀挎湡鎸佹湁锛屾棤闄愮敓瀛樻湡锛岄伩鍏嶈繙绋嬬绾﹀埌鏈熻鍥炴敹
+        public override object InitializeLifetimeService() => null;
+
+        internal DriverInstance(DriverLoader owner, string handle, string typeFullName,
+                                string driverType, string brand)
+        {
+            _owner = owner;
+            Handle = handle;
+            TypeFullName = typeFullName;
+            DriverType = driverType;
+            Brand = brand;
+        }
+
+        /// <summary>鍒楀嚭璇ラ┍鍔ㄧ被鍨嬪彲璋冪敤鐨勫叕鍏辨柟娉曪紙鐢ㄤ簬纭畾 methodIndex锛�</summary>
+        public DriverMethodInfo[] GetMethods()
+        {
+            return _owner.GetMethods(TypeFullName);
+        }
+
+        /// <summary>
+        /// 鍦ㄨ椹卞姩瀹炰緥涓婂弽灏勮皟鐢ㄦ柟娉曘�傚弬鏁颁负瀛楃涓插舰寮忥紝鎸夌洰鏍囩被鍨嬭嚜鍔ㄨ浆鎹紝
+        /// out/ref 鍙傛暟鐨勫洖濉�间細鍖呭惈鍦ㄧ粨鏋滀腑銆�
+        /// </summary>
+        public InvokeResult Invoke(int methodIndex, string[] rawArgs)
+        {
+            return _owner.InvokeOnInstance(Handle, methodIndex, rawArgs);
+        }
+
+        /// <summary>
+        /// 鐩存帴璋冪敤锛堝師濮嬪璞″弬鏁�/杩斿洖鍊硷級锛屼緵鍔ㄦ�佷唬鐞嗕娇鐢ㄣ��
+        /// 娉ㄦ剰锛氬弬鏁颁笌杩斿洖鍊煎繀椤诲彲璺ㄥ煙灏侀�侊紙鍩哄厓绫诲瀷銆乻tring銆乕Serializable] DTO锛夈��
+        /// </summary>
+        public InvokeDirectResult InvokeDirect(int methodIndex, object[] args)
+        {
+            return _owner.InvokeOnInstanceDirect(Handle, methodIndex, args);
+        }
+
+        /// <summary>
+        /// 閲婃斁璇ュ疄渚嬶紙鑻ラ┍鍔ㄥ疄鐜颁簡 IDisposable 鍒欒皟鐢� Dispose锛夈��
+        /// </summary>
+        public void Release()
+        {
+            _owner.ReleaseInstance(Handle);
+        }
+    }
+}

--
Gitblit v1.9.1