JD2022-TU1/main/tools/framework/JD.TeaBoxAddinSystem/Addins/MEF/AddinService.cs

87 lines
2 KiB
C#

using System;
using System.Collections.Generic;
using System.Reflection;
using JD.Collections;
using JD.Kernel.Classes;
using JD.LogService;
namespace JD.TeaBoxAddinSystem.Addins.MEF
{
public static class AddinService
{
#region Variables
private static IAddinService ms_instance = new EmptyAddinService();
#endregion
#region Properties
private static IAddinService Instance
{
get
{
return ms_instance;
}
}
public static IEnumerable<IAddin> Addins
{
get { return Instance.Addins; }
}
public static ObservableList<Assembly> DynamicAssemblies
{
get { return Instance.DynamicAssemblies; }
}
#endregion
#region Methods
public static IDisposable Use(IAddinService instance)
{
var oldInstance = ms_instance;
ms_instance = instance;
return new DisposableHelper(() => ms_instance = oldInstance);
}
#region Facade
/// <summary>
/// Satisfies all imports on the given <paramref name="part"/>.
/// </summary>
/// <param name="part"></param>
public static void Compose(object part)
{
Instance.Compose(part);
}
/// <summary>
/// Creates and composes a new object of type <typeparamref name="T"/>.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T Compose<T>()
where T: new()
{
T instance = new T();
Compose(instance);
return instance;
}
/// <summary>
/// Validates the addin ecosystem for common errors/problems.
/// </summary>
/// <param name="logger"></param>
public static bool Validate(ILogger logger)
{
return Instance.Validate(logger);
}
#endregion
#endregion
}
}