# Quickuse.Ioc **Repository Path**: quickuse/Quickuse.Ioc ## Basic Information - **Project Name**: Quickuse.Ioc - **Description**: 快速应用.依赖注入组件 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2020-03-22 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: ioc-framework **Tags**: None ## README # Quickuse.Ioc 轻量级 .NET 依赖注入组件,基于 **Autofac** 提供约定优于配置的自动注册能力,并集成 **Castle.Core** 动态代理实现 AOP 切面编程。 [![NuGet](https://img.shields.io/nuget/v/Quickuse.Ioc)](https://www.nuget.org/packages/Quickuse.Ioc) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ![.NET Standard 2.1](https://img.shields.io/badge/.NET%20Standard-2.1-blue) 在线文档:http://quickuse.gitee.io/quickuse.ioc --- ## 特性 - 基于 `IDependency` 接口的自动扫描注册,零配置上手 - 特性驱动的生命周期声明(`[SingleInstance]` / `[ScopeInstance]` / 默认瞬时),可标注在接口或实现类上,**实现类优先** - `[Named]` 命名服务,支持同一接口多实现 - `[PropertiesAutowired]` 属性注入 - 内置拦截器支持(类代理 / 接口代理),轻松实现日志、事务、缓存等横切关注点 - `ProxyMode` 代理模式开关:`ClassProxy`(默认,需 `virtual`)/ `InterfaceProxy`(接口所有方法均拦截) - `OnRegister` 事件钩子,在容器构建前追加自定义注册逻辑 - `EnableStrictMode()` 严格模式,容器未初始化时抛出异常 - `ServiceCount` 诊断属性,查看自动扫描注册的服务总数 - 环境变量配置程序集扫描白名单/黑名单,优化启动速度 - 支持 ASP.NET Core、Generic Host 和控制台应用 --- ## 安装 ```bash Install-Package Quickuse.Ioc ``` --- ## 快速开始 **定义可注入服务** ```csharp // 接口继承 IDependency,框架自动发现并注册 public interface IStudentService : IDependency { string SayHello(string name); } // 单例生命周期(也可标注在实现类上) [SingleInstance] public class StudentService : IStudentService { public string SayHello(string name) => $"你好,{name}!"; } ``` **ASP.NET Core(Program.cs)** ```csharp var builder = WebApplication.CreateBuilder(args); // 接入日志(可选) builder.Services.ConfigureQuickuseIoc(); // 替换容器,传入拦截器类型(可选) // 默认类代理(virtual 方法才拦截),切换接口代理: // builder.Services.ConfigureQuickuseIoc(cfg => cfg.ProxyMode = InterceptorProxyMode.InterfaceProxy); builder.Host.UseQuickuseProvider(typeof(LogInterceptor)); var app = builder.Build(); app.UseQuickuseIoc(); // 绑定日志工厂(可选) app.Run(); ``` **控制台应用** ```csharp // 切换接口代理模式(可选,默认 ClassProxy) // ServiceLocator.ProxyMode = InterceptorProxyMode.InterfaceProxy; ServiceLocator.Build(typeof(LogInterceptor)); var service = ServiceLocator.GetService(); Console.WriteLine(service.SayHello("张三")); // 诊断:查看自动扫描注册的服务数量 Console.WriteLine($"共注册了 {ServiceLocator.ServiceCount} 个服务"); ``` --- ## 生命周期 | 特性 | 说明 | |------|------| | `[SingleInstance]` | 单例,整个容器生命周期共享一个实例 | | `[ScopeInstance]` | 作用域,每次 HTTP 请求 / `BeginLifetimeScope()` 内共享 | | 无标注(默认) | 瞬时,每次解析返回新实例 | 特性可标注在接口或实现类上,**实现类优先**。 --- ## 拦截器代理模式 自动扫描路径默认使用**类代理**(`ClassProxy`),只有 `virtual` 方法才会进入拦截器。若希望接口上所有方法都被拦截,切换为**接口代理**(`InterfaceProxy`): ```csharp // 控制台应用:在 Build() 之前设置 ServiceLocator.ProxyMode = InterceptorProxyMode.InterfaceProxy; ServiceLocator.Build(typeof(LogInterceptor)); // ASP.NET Core:通过 ConfigureQuickuseIoc 配置 builder.Services.ConfigureQuickuseIoc(cfg => cfg.ProxyMode = InterceptorProxyMode.InterfaceProxy); builder.Host.UseQuickuseProvider(typeof(LogInterceptor)); ``` | 模式 | 要求 | 适用场景 | |------|------|---------| | `ClassProxy`(默认) | 被拦截方法必须是 `virtual` | 性能优先,只拦截部分方法 | | `InterfaceProxy` | 无特殊要求 | 需要拦截接口上所有方法 | --- ## 目标框架 `netstandard2.1`,兼容 .NET Core 3.1+。 --- ## 许可证 [MIT](LICENSE)