87 lines
2 KiB
C#
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
|
|
}
|
|
}
|