46 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |