.netcore 自带依赖注入
.net core主要提供了三种依赖注入的方式
AddTransient瞬时模式:每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
AddSingleton单例模式:每次都获取同一个实例
权重:
AddSingleton→AddTransient→AddScoped
AddSingleton的生命周期:
项目启动-项目关闭 相当于静态类 只会有一个
AddScoped的生命周期:
请求开始-请求结束 在这次请求中获取的对象都是同一个
AddTransient的生命周期:
请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个
问题:如果我们需要注入的对象很多怎么办?(通过反射来解决)
新建扩展方法CoreExtensions,然后在Startup中ConfigureServices方法中加上 services.AddRepository();。
注入接口
1 services.AddScoped(typeof(IUserService), typeof(UserService)); 2 services.AddScoped<IUserService, UserService>();
无接口,自己注入自己
services.AddScoped<UserService>(); services.AddScoped(typeof(UserService));
注入,构造函数传参
1 services.AddScoped<IUserService, UserSerivce>(x => {return new UserSerivce("");}); 2 services.AddScoped<IUserService>(x => {return new UserSerivce("");}); 3 services.AddScoped(typeof(IUserService), x => {return new UserSerivce("");});
注入,构造函数传参,需要依赖另一服务
1 services.Add<IUserService, UserService>(x => {return new UserService(x.GetServce<SomeService>());});
动态注入多个接口实现
1 var assembly = Assembly.GetExecutingAssembly().DefinedTypes.Where(a => a.Name.EndsWith("Service") && !a.Name.StartWith("I")); 2 foreach(var assm in assembly) 3 { 4 services.AddTransient(assm.GetInterfaces.FirstOrDefault(), assm); 5 }
调用的时候:IEnumerable<IUserService>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2021-05-10 [HttpPost]和[AcceptVerbs(HttpVerbs.Post)]区别