using DesktopTools.Interfaces; using ToolsModule.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\\"; /// /// Загрузка всех классов-реализаций IWindowDesktopExtension /// /// public static List GetWindowDesktopExtensions() { var list = new List(); if (Directory.Exists(_pathToWindowDestopExt)) { var files = Directory.GetFiles(_pathToWindowDestopExt, "*.dll", SearchOption.AllDirectories); var loadedFiles = new List(); 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; } } }