| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- using System;
- using System.Reflection;
- using System.Windows;
- using TeamAAS.Communication.Attributes;
- using TeamAAS.Communication.Interfaces;
- namespace TeamAAS.Communication.UI
- {
- /// <summary>
- /// 通讯设备调试页工厂:按设备类型上的 [Communication] 特性选择品牌专属调试页,
- /// 未指定 DebugPageType 时回退到默认调试页(DefaultCommunicationDebugPage,本库内)。
- /// 创建成功后自动把设备实例绑定给实现了 ICommunicationDebugPage 的页面。永不返回 null。
- /// </summary>
- public static class CommunicationDebugPageFactory
- {
- public static FrameworkElement Create(ICommunication communication)
- {
- Type pageType = typeof(DefaultCommunicationDebugPage);
- if (communication != null)
- {
- var attr = communication.GetType().GetCustomAttribute<CommunicationAttribute>(inherit: true);
- if (attr != null && attr.DebugPageType != null && typeof(FrameworkElement).IsAssignableFrom(attr.DebugPageType))
- pageType = attr.DebugPageType;
- }
- FrameworkElement page = null;
- try
- {
- page = Activator.CreateInstance(pageType) as FrameworkElement;
- }
- catch (Exception ex)
- {
- System.Diagnostics.Debug.WriteLine($"创建通讯调试页 {pageType.Name} 失败: {ex.Message}");
- }
- if (page == null) page = new DefaultCommunicationDebugPage();
- if (communication != null && page is ICommunicationDebugPage)
- ((ICommunicationDebugPage)page).BindCommunication(communication);
- return page;
- }
- }
- }
|