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