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;
}
}
}