JD2022-TU1/main/tools/modules/JD.AssetViewer/View/AssetViewerManager.cs

41 lines
1.1 KiB
C#

using JD.AssetViewer.View.BaseTypes;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Windows;
using JD.Asset;
using JD.Asset.View;
using JD.Interfaces.Composition;
using TeaBox;
namespace JD.AssetViewer.View
{
public class AssetViewerManager
{
public static AssetViewerManager Instance { get; } = new AssetViewerManager();
[System.ComponentModel.Composition.ImportMany]
public List<IAssetViewer> AllViewers { get; set; } = new List<IAssetViewer>();
private IAssetViewer DefaultViewer => AllViewers.OfType<DefaultViewer>().FirstOrDefault();
private AssetViewerManager()
{
this.ComposeCatalog(typeof(IAssetViewer));
}
public UIElement CreateView(IAsset asset)
{
var viewer = AllViewers.FirstOrDefault(x => x.CanHandle(asset));
try
{
return viewer?.Instantiate(asset) ?? DefaultViewer.Instantiate(asset);
}
catch (Exception)
{
return null;
}
}
}
}