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