using System; using System.Reflection; using System.Windows; using TeamAAS.Database.Attributes; using TeamAAS.Database.Services; namespace TeamAAS.Database.UI { /// /// 配置页工厂(对齐 CameraDebugPageFactory):按数据库提供者上的 [DatabaseProvider] 特性选择配置页类型, /// 未指定 时回退默认页 ; /// 创建成功后自动把产品数据库实例绑定给实现了 的页面。 /// public static class DatabaseConfigPageFactory { /// 为指定产品数据库创建配置/调试页(FrameworkElement,可直接塞进 ContentControl)。 public static FrameworkElement Create(ProductDatabase database) { Type pageType = typeof(DefaultDatabaseConfigPage); if (database?.Database != null) { var attr = database.Database.GetType() .GetCustomAttribute(inherit: false); if (attr?.ConfigPageType != null && typeof(FrameworkElement).IsAssignableFrom(attr.ConfigPageType)) { pageType = attr.ConfigPageType; } } 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 DefaultDatabaseConfigPage(); if (database != null && page is IDatabaseConfigPage bindable) bindable.BindDatabase(database); return page; } } }