using System; using System.Collections.Generic; using System.Text; using Microsoft.Extensions.DependencyInjection; using CZFW.Framework.Interface; using System.Threading; using System.Reflection; using System.IO; using System.Linq; using Microsoft.AspNetCore.Http; namespace CZFW.Framework.Logic { public static class ConfigureFrameworkServicesExtensions { public static IServiceCollection ConfigureFrameworkServices(this IServiceCollection services) { services.AddSingleton(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddLogging(); return services; } public static void Configure(ref IServiceCollection services, IList interfaceDlls, IList interfaceNamespaces, IList serviceDlls) { string path = Thread.GetDomain().BaseDirectory; if (path.LastIndexOf("Debug", StringComparison.Ordinal) != -1) { path = path.TrimEnd(@"\Debug".ToCharArray()); } else { path += "bin"; } IList interfaceFiles = new List(); foreach(var item in interfaceDlls) { var file = new FileInfo($"{path}\\{item}"); interfaceFiles.Add(file); } var baseInterface = typeof(IDependency); var interfaceAssemblies = interfaceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList(); List itfs = new List(); foreach(var item in interfaceAssemblies) { var tp1 = item.GetTypes().Where(x => x.IsInterface&&interfaceNamespaces.Contains(x.Namespace)).ToList(); itfs.AddRange(tp1); } IList serviceFiles = new List(); foreach(var item in serviceDlls) { var file = new FileInfo($"{path}\\{item}"); serviceFiles.Add(file); } var servicesAssemblies = serviceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList(); List serviceTypes = new List(); foreach(var item in servicesAssemblies) { var tp = item.GetTypes().Where(x => x.IsClass); serviceTypes.AddRange(tp); } foreach(var item in itfs) { var serviceType = serviceTypes.Where(x => x.GetInterfaces().Contains(item)).FirstOrDefault(); services.AddTransient(item, serviceType); //services.AddTransient } //Assembly[] assemblies = new DirectoryInfo(path).GetFiles("CZ*.*.dll", SearchOption.AllDirectories) // .Select(x => Assembly.LoadFrom(x.FullName)).ToArray(); } } }