using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Xml.XPath; using ToolsModule.ManagmentExtension; namespace ToolsModule.ManagmentDependency { /// /// Загрузчик данных /// public static partial class ServiceProviderLoader { private static readonly string _pathToImplementationExt = "..\\..\\..\\..\\ImplementationExtensions\\"; /// /// Загрузка всех классов-реализаций IImplementationExtension /// /// public static List GetImplementationExtensions() { var list = new List(); if(Directory.Exists(_pathToImplementationExt)) { var files = Directory.GetFiles(_pathToImplementationExt, "*.dll", SearchOption.AllDirectories); var loadedFiles = new List(); foreach(var file in files.Distinct()) { if(loadedFiles.Contains(file.GetFileName())) { continue; } var asm = Assembly.LoadFrom(file); foreach (var t in asm.GetExportedTypes()) { if (t.IsClass && typeof(IDependencyRegistration).IsAssignableFrom(t)) { list.Add((IDependencyRegistration)Activator.CreateInstance(t)); } } loadedFiles.Add(file.GetFileName()); } } return list; } /// /// Получение имени файла /// /// /// private static string GetFile(string fileName) => Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), fileName); } }