105 lines
4.4 KiB
C#
105 lines
4.4 KiB
C#
//using JiShe.CollectBus.Common.Extensions.DependencyInjections;
|
|
//using System.Reflection;
|
|
//using JiShe.CollectBus.Common.Abstractions;
|
|
//using Microsoft.Extensions.Hosting;
|
|
//using System;
|
|
//using Microsoft.Extensions.Configuration;
|
|
//using Serilog;
|
|
|
|
//// ReSharper disable once CheckNamespace
|
|
//namespace Microsoft.Extensions.DependencyInjection
|
|
//{
|
|
// public static class DependencyInjectionExtensions
|
|
// {
|
|
// public static IServiceCollection ModuleRegister(this IServiceCollection services, IConfiguration configuration)
|
|
// {
|
|
// var assemblies = GetBinAssemblies();
|
|
|
|
// foreach (var assembly in assemblies)
|
|
// {
|
|
// var allTypes = assembly.GetTypes();
|
|
// foreach (var type in allTypes)
|
|
// {
|
|
// if (typeof(IJiSheModule).IsAssignableFrom(type) && type is { IsClass: true, IsAbstract: false })
|
|
// {
|
|
// Log.Logger.Information($"正在加载模块{type.Name}...");
|
|
// var instance = Activator.CreateInstance(type);
|
|
// _ = (type.GetMethod("ConfigureServices")?.Invoke(instance, [services, configuration]));
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// return services;
|
|
// }
|
|
|
|
// public static IServiceCollection ServiceRegister(this IServiceCollection services)
|
|
// {
|
|
// var assemblies = GetBinAssemblies();
|
|
|
|
// foreach (var assembly in assemblies)
|
|
// {
|
|
// var allTypes = assembly.GetTypes();
|
|
// foreach (var type in allTypes)
|
|
// {
|
|
// if (type is not { IsClass: true, IsAbstract: false }) continue;
|
|
// if (typeof(ISingletonDependency).IsAssignableFrom(type))
|
|
// {
|
|
// var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("ISingletonDependency") && !p.FullName.Contains("IDisposable"));
|
|
// foreach (var interfaceType in interfaceTypes)
|
|
// {
|
|
// Log.Logger.Information($"正在IOC注入ISingletonDependency {type.Name}...");
|
|
// services.AddSingleton(interfaceType, type);
|
|
// }
|
|
// }
|
|
|
|
// if (typeof(ITransientDependency).IsAssignableFrom(type))
|
|
// {
|
|
// var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("ITransientDependency") && !p.FullName.Contains("IDisposable"));
|
|
// foreach (var interfaceType in interfaceTypes)
|
|
// {
|
|
// Log.Logger.Information($"正在IOC注入ITransientDependency {type.Name}...");
|
|
// services.AddTransient(interfaceType, type);
|
|
// }
|
|
// }
|
|
|
|
// if (typeof(IScopedDependency).IsAssignableFrom(type))
|
|
// {
|
|
// var interfaceTypes = type.GetInterfaces().Where(p => p.FullName != null && !p.FullName.Contains("IScopedDependency") && !p.FullName.Contains("IDisposable"));
|
|
// foreach (var interfaceType in interfaceTypes)
|
|
// {
|
|
// Log.Logger.Information($"正在IOC注入IScopedDependency {type.Name}...");
|
|
// services.AddScoped(interfaceType, type);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// return services;
|
|
// }
|
|
|
|
// private static IEnumerable<Assembly> GetBinAssemblies()
|
|
// {
|
|
// var directory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
|
|
// if (!directory.Exists) return [];
|
|
|
|
// var files = directory.GetFiles("JiShe.CollectBus.*.dll");
|
|
|
|
// var assemblies = new List<Assembly>();
|
|
// foreach (var file in files)
|
|
// {
|
|
// try
|
|
// {
|
|
// var assembly = Assembly.LoadFrom(file.FullName);
|
|
// assemblies.Add(assembly);
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// Console.WriteLine($"Error loading assembly from {file.FullName}: {ex.Message}");
|
|
// }
|
|
// }
|
|
|
|
// return assemblies;
|
|
// }
|
|
// }
|
|
//}
|