文件内容 AutoDependencyInjectionExtensions.cs 2 KB 2557 字符
//using Microsoft.Extensions.DependencyInjection;
//using System.Reflection;

//namespace PasteApeart
//{
//    /// <summary>
//    /// 自动执行注入
//    /// </summary>
//    public static class AutoDependencyInjectionExtensions
//    {

//        /// <summary>
//        /// 扫描注入 瞬时 作用域 单例等
//        /// </summary>
//        /// <param name="services"></param>
//        /// <param name="assembly"></param>
//        /// <returns></returns>
//        public static IServiceCollection AddAutoDependencyInjection(this IServiceCollection services, Assembly assembly)
//        {
//            // 1. 扫描所有类型
//            var types = assembly.GetTypes()
//                .Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface);

//            foreach (var type in types)
//            {
//                // 检查实现的接口
//                var interfaces = type.GetInterfaces();

//                // ITransientDependency → 瞬时
//                if (interfaces.Any(i => i == typeof(ITransientDependency)))
//                {
//                    // 注册自身
//                    services.AddTransient(type);

//                    // 注册所有接口(除了标记接口本身)
//                    var serviceInterfaces = interfaces.Where(i => i != typeof(ITransientDependency));
//                    foreach (var serviceInterface in serviceInterfaces)
//                    {
//                        services.AddTransient(serviceInterface, type);
//                    }
//                }
//                // ISingletonDependency → 单例
//                else if (interfaces.Any(i => i == typeof(ISingletonDependency)))
//                {
//                    services.AddSingleton(type);

//                    var serviceInterfaces = interfaces.Where(i => i != typeof(ISingletonDependency));
//                    foreach (var serviceInterface in serviceInterfaces)
//                    {
//                        services.AddSingleton(serviceInterface, type);
//                    }
//                }
//                // IScopedDependency → 作用域
//                else if (interfaces.Any(i => i == typeof(IScopedDependency)))
//                {
//                    services.AddScoped(type);

//                    var serviceInterfaces = interfaces.Where(i => i != typeof(IScopedDependency));
//                    foreach (var serviceInterface in serviceInterfaces)
//                    {
//                        services.AddScoped(serviceInterface, type);
//                    }
//                }
//            }

//            return services;
//        }
//    }
//}
​ ​