DepartmentProject/DepartmentPortal/Common/DesktopTools/BusinessLogics/DesktopLoader.cs

46 lines
1.3 KiB
C#

using DesktopTools.Interfaces;
using ModuleTools.Extensions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
namespace DesktopTools.BusinessLogics
{
public static partial class DesktopLoader
{
private static readonly string _pathToWindowDestopExt = "..\\..\\..\\..\\WindowDestopExtensions\\";
/// <summary>
/// Загрузка всех классов-реализаций IWindowDesktopExtension
/// </summary>
/// <returns></returns>
public static List<IWindowDesktopExtension> GetWindowDesktopExtensions()
{
var list = new List<IWindowDesktopExtension>();
if (Directory.Exists(_pathToWindowDestopExt))
{
var files = Directory.GetFiles(_pathToWindowDestopExt, "*.dll", SearchOption.AllDirectories);
var loadedFiles = new List<string>();
foreach (var file in files.Distinct())
{
if (loadedFiles.Contains(file.GetFileName()))
{
continue;
}
Assembly asm = Assembly.LoadFrom(file);
foreach (var t in asm.GetExportedTypes())
{
if (t.IsClass && typeof(IWindowDesktopExtension).IsAssignableFrom(t))
{
list.Add((IWindowDesktopExtension)Activator.CreateInstance(t));
}
}
loadedFiles.Add(file.GetFileName());
}
}
return list;
}
}
}