41 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|